import sqlite3
import os
from datetime import datetime

# Cesta k databázovému souboru
DB_PATH = "data/exchange_rates.db"

# Global debug flag
DEBUG = False

def debug_print(*args, **kwargs):
    """Print debug messages only if debug mode is enabled."""
    if DEBUG:
        print(*args, **kwargs)

def set_debug_mode(debug):
    """Set the debug mode for this module."""
    global DEBUG
    DEBUG = debug

def init_db():
    """
    Inicializuje databázi a vytvoří tabulku exchange_rates, pokud neexistuje.
    """
    # Ujistěme se, že adresář data existuje
    os.makedirs("data", exist_ok=True)
    
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    
    # Vytvoření tabulky exchange_rates
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS exchange_rates (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            date TEXT NOT NULL,
            currency_code TEXT NOT NULL,
            amount INTEGER NOT NULL,
            rate REAL NOT NULL,
            UNIQUE(date, currency_code, amount)
        )
    ''')
    
    conn.commit()
    conn.close()
    debug_print(f"Databáze inicializována: {DB_PATH}")

def insert_rate(date, currency_code, amount, rate):
    """
    Vloží nebo aktualizuje kurz do databáze.

    :param date: Datum ve formátu DD.MM.YYYY.
    :param currency_code: Kód měny (např. USD).
    :param amount: Množství (např. 1, 100).
    :param rate: Kurz jako desetinné číslo.
    """
    # Převod data do formátu YYYY-MM-DD
    try:
        dt = datetime.strptime(date, "%d.%m.%Y")
        formatted_date = dt.strftime("%Y-%m-%d")
    except ValueError:
        debug_print(f"Neplatný formát data: {date}")
        return
    
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    
    # Vložení nebo aktualizace záznamu
    cursor.execute('''
        INSERT OR REPLACE INTO exchange_rates (date, currency_code, amount, rate)
        VALUES (?, ?, ?, ?)
    ''', (formatted_date, currency_code, amount, rate))
    
    conn.commit()
    conn.close()

def get_rate(date, currency_code):
    """
    Vyhledá kurz pro zadané datum a měnu.

    :param date: Datum ve formátu DD.MM.YYYY.
    :param currency_code: Kód měny (např. USD).
    :return: Kurz jako desetinné číslo, nebo None pokud není nalezen.
    """
    # Převod data do formátu YYYY-MM-DD
    try:
        dt = datetime.strptime(date, "%d.%m.%Y")
        formatted_date = dt.strftime("%Y-%m-%d")
    except ValueError:
        debug_print(f"Neplatný formát data: {date}")
        return None
    
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    
    # Vyhledání kurzu
    cursor.execute('''
        SELECT rate FROM exchange_rates
        WHERE date = ? AND currency_code = ?
        ORDER BY amount ASC
        LIMIT 1
    ''', (formatted_date, currency_code))
    
    row = cursor.fetchone()
    conn.close()
    
    if row:
        return row[0]
    else:
        return None

# Příklad použití
if __name__ == "__main__":
    init_db()