import sys
import os
from datetime import datetime

# Přidání adresáře src do sys.path, aby bylo možné importovat moduly
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))

import rate_finder
import database
import holidays

def test_future_date():
    """Test vyhledání kurzu pro budoucí datum."""
    print("Test: Vyhledání kurzu pro budoucí datum...")
    future_date = "01.01.2030"
    rate = rate_finder.get_rate_for_date(future_date, "USD")
    assert rate is None, "Mělo by vrátit None pro budoucí datum"
    print("Test pro budoucí datum: OK")

def test_today_before_1430():
    """Test vyhledání kurzu pro dnešní datum před 14:30."""
    print("Test: Vyhledání kurzu pro dnešní datum před 14:30...")
    # Pro tento test předpokládáme, že čas je před 14:30
    # Tento test může být složitější na automatizaci, protože závisí na aktuálním čase
    # Pro jednoduchost jej provedeme pouze pokud je to relevantní
    today = datetime.now()
    if today.time() < datetime.strptime("14:30", "%H:%M").time():
        today_str = today.strftime("%d.%m.%Y")
        rate = rate_finder.get_rate_for_date(today_str, "USD")
        assert rate is None, "Mělo by vrátit None pro dnešní datum před 14:30"
        print("Test pro dnešní datum před 14:30: OK")
    else:
        print("Test pro dnešní datum před 14:30: Přeskočeno (čas je po 14:30)")

def test_weekend_with_previous_workday():
    """Test vyhledání kurzu pro víkend s předchozím pracovním dnem."""
    print("Test: Vyhledání kurzu pro víkend...")
    # 11.08.2025 je pondělí, 10.08.2025 je neděle
    # Otestujeme, zda pro neděli vrátí kurz z pondělí
    
    # Nejprve vložíme testovací kurz pro pondělí
    database.init_db()
    database.insert_rate("11.08.2025", "TEST", 1, 25.0)
    
    rate = rate_finder.get_rate_for_date("10.08.2025", "TEST")
    # Očekáváme, že vrátí kurz z 11.08.2025, ale protože logika hledá zpět, 
    # měl by najít kurz z předchozího pracovního dne, který je 08.08.2025 (pátek)
    # Nicméně v naší testovací databázi máme jen kurz z 11.08.2025
    # Takže tento test by měl selhat, pokud není správně implementována logika.
    # Pro správný test bychom museli mít data v databázi.
    # Upravíme test tak, že vložíme kurz pro 08.08.2025 a otestujeme proti němu.
    
    # Vložíme kurz pro 08.08.2025
    database.insert_rate("08.08.2025", "TEST", 1, 24.5)
    # 10.08.2025 je neděle, předchozí pracovní den je 08.08.2025
    rate = rate_finder.get_rate_for_date("10.08.2025", "TEST")
    assert rate == 24.5, f"Očekáváno 24.5, ale vráceno {rate}"
    print("Test pro víkend: OK")

def run_all_tests():
    """Spustí všechny testy."""
    print("Spouštím testy modulu rate_finder.py...")
    test_future_date()
    test_today_before_1430()
    test_weekend_with_previous_workday()
    print("\nVšechny testy modulu rate_finder.py byly úspěšné!")

if __name__ == "__main__":
    run_all_tests()