from __future__ import annotations

from jarvis_finance.quality.alerts import create_alert
from jarvis_finance.quality.checks import check_missing_fx
from jarvis_finance.storage.database import connect_memory
from jarvis_finance.storage.migrations import apply_migrations


def test_create_alert() -> None:
    conn = connect_memory()
    apply_migrations(conn)
    alert_id = create_alert(conn, priority="wichtig", category="data_quality", message="Demo warning")
    row = conn.execute("SELECT priority, category FROM alerts WHERE alert_id=?", (alert_id,)).fetchone()
    assert dict(row) == {"priority": "wichtig", "category": "data_quality"}


def test_missing_fx_creates_critical_alert() -> None:
    conn = connect_memory()
    apply_migrations(conn)
    conn.execute("INSERT INTO platforms(platform_id,name,platform_type,created_at) VALUES('p1','Demo','broker','now')")
    conn.execute("INSERT INTO accounts(account_id,platform_id,account_name,account_type,created_at) VALUES('a1','p1','Demo','brokerage','now')")
    conn.execute("""
        INSERT INTO transactions(transaction_id,transaction_type,account_id,trade_date,currency_original,fx_status,source_type,created_at)
        VALUES('t1','buy','a1','2026-01-01','USD','missing','manual','now')
    """)
    assert check_missing_fx(conn) == 1
    row = conn.execute("SELECT priority, category, rule_id FROM alerts").fetchone()
    assert row["priority"] == "kritisch"
    assert row["category"] == "fx"
