"""Built-in strategies (spec §14) and the Default Balanced Quality preset (spec §15). Seeded as
system `screeners` rows (owner_user_id = NULL) by scripts/seed_demo.py; editable from the UI
after loading (docs/SCREENING.md §2 — presets are a starting point, not a locked mode)."""
from __future__ import annotations

# Verbatim from spec §15 — explicitly configurable defaults, not universal rules.
DEFAULT_BALANCED_QUALITY = {
    "universe": {"region": "WORLD"},
    "logic": "AND",
    "filters": [
        {"metric": "roic", "op": "gt", "value": 12, "relative": "absolute"},
        {"metric": "roic_minus_wacc", "op": "gt", "value": 5, "relative": "absolute"},
        {"metric": "revenue_growth_yoy", "op": "gt", "value": 5, "relative": "absolute"},
        {"metric": "revenue_cagr_5y", "op": "gt", "value": 5, "relative": "absolute"},
        {"metric": "eps_growth_yoy", "op": "gt", "value": 7, "relative": "absolute"},
        {"metric": "fcf_growth_yoy", "op": "gt", "value": 5, "relative": "absolute"},
        {"metric": "debt_to_ebitda", "op": "lt", "value": 2, "relative": "absolute"},
        {"metric": "net_debt_to_ebitda", "op": "lt", "value": 1.5, "relative": "absolute"},
        {"metric": "debt_to_equity", "op": "lt", "value": 1.5, "relative": "absolute"},
        {"metric": "interest_coverage", "op": "gt", "value": 8, "relative": "absolute"},
        {"metric": "current_ratio", "op": "gt", "value": 1, "relative": "absolute"},
        {"metric": "fcf_margin", "op": "gt", "value": 8, "relative": "absolute"},
        {"metric": "fcf_yield", "op": "gt", "value": 3, "relative": "absolute"},
        {"metric": "peg", "op": "lt", "value": 2, "relative": "absolute"},
        {"metric": "roe", "op": "gt", "value": 12, "relative": "absolute"},
        {"metric": "fcf_payout_ratio", "op": "lt", "value": 80, "relative": "absolute"},
    ],
    "sort": {"by": "overall_score", "direction": "desc"},
}

# key -> (display name, filter_json builder, score weight overrides)
BUILT_IN_STRATEGIES: dict[str, dict] = {
    "QUALITY": {"name": "Quality", "filter_json": DEFAULT_BALANCED_QUALITY,
                "weights": {"quality": 0.35, "financial_health": 0.20, "growth": 0.15, "competitive_advantage": 0.20, "valuation": 0.10}},
    "QUALITY_AT_REASONABLE_PRICE": {"name": "Quality at Reasonable Price", "filter_json": DEFAULT_BALANCED_QUALITY,
                "weights": {"quality": 0.25, "financial_health": 0.20, "growth": 0.15, "competitive_advantage": 0.15, "valuation": 0.25}},
    "VALUE": {"name": "Value", "filter_json": {"filters": [
        {"metric": "pe", "op": "lt", "value": 15, "relative": "absolute"},
        {"metric": "p_fcf", "op": "lt", "value": 12, "relative": "absolute"},
        {"metric": "ev_to_ebitda", "op": "lt", "value": 8, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.15, "financial_health": 0.20, "growth": 0.10, "competitive_advantage": 0.10, "valuation": 0.45}},
    "GROWTH": {"name": "Growth", "filter_json": {"filters": [
        {"metric": "revenue_growth_yoy", "op": "gt", "value": 15, "relative": "absolute"},
        {"metric": "eps_growth_yoy", "op": "gt", "value": 15, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.20, "financial_health": 0.10, "growth": 0.45, "competitive_advantage": 0.15, "valuation": 0.10}},
    "GROWTH_AT_REASONABLE_PRICE": {"name": "Growth at a Reasonable Price", "filter_json": {"filters": [
        {"metric": "eps_growth_yoy", "op": "gt", "value": 12, "relative": "absolute"},
        {"metric": "peg", "op": "lt", "value": 1.5, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.20, "financial_health": 0.15, "growth": 0.30, "competitive_advantage": 0.15, "valuation": 0.20}},
    "COMPOUNDER": {"name": "Compounder", "filter_json": {"filters": [
        {"metric": "roic", "op": "gt", "value": 15, "relative": "absolute"},
        {"metric": "revenue_cagr_5y", "op": "gt", "value": 8, "relative": "absolute"},
        {"metric": "share_count_growth_cagr_3y", "op": "lt", "value": 0.5, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.35, "financial_health": 0.20, "growth": 0.25, "competitive_advantage": 0.15, "valuation": 0.05}},
    "DIVIDEND": {"name": "Dividend", "filter_json": {"filters": [
        {"metric": "dividend_yield", "op": "gt", "value": 2, "relative": "absolute"},
        {"metric": "fcf_payout_ratio", "op": "lt", "value": 75, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.20, "financial_health": 0.30, "growth": 0.10, "competitive_advantage": 0.15, "valuation": 0.25}},
    "HIGH_FCF": {"name": "High FCF", "filter_json": {"filters": [
        {"metric": "fcf_margin", "op": "gt", "value": 15, "relative": "absolute"},
        {"metric": "fcf_yield", "op": "gt", "value": 5, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.30, "financial_health": 0.20, "growth": 0.15, "competitive_advantage": 0.15, "valuation": 0.20}},
    "LOW_DEBT": {"name": "Low Debt", "filter_json": {"filters": [
        {"metric": "net_debt_to_ebitda", "op": "lt", "value": 0.5, "relative": "absolute"},
        {"metric": "debt_to_equity", "op": "lt", "value": 0.5, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.20, "financial_health": 0.45, "growth": 0.10, "competitive_advantage": 0.15, "valuation": 0.10}},
    "HIGH_ROIC": {"name": "High ROIC", "filter_json": {"filters": [
        {"metric": "roic", "op": "gt", "value": 20, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.45, "financial_health": 0.15, "growth": 0.15, "competitive_advantage": 0.15, "valuation": 0.10}},
    "DEEP_VALUE": {"name": "Deep Value", "filter_json": {"filters": [
        {"metric": "pe", "op": "lt", "value": 10, "relative": "absolute"},
        {"metric": "p_fcf", "op": "lt", "value": 8, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.10, "financial_health": 0.20, "growth": 0.05, "competitive_advantage": 0.05, "valuation": 0.60}},
    "TURNAROUND": {"name": "Turnaround", "filter_json": {"filters": [
        {"metric": "revenue_growth_yoy", "op": "gt", "value": 0, "relative": "absolute"},
        {"metric": "operating_margin", "op": "gt", "value": 0, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.15, "financial_health": 0.30, "growth": 0.30, "competitive_advantage": 0.10, "valuation": 0.15}},
    "LARGE_CAP_QUALITY": {"name": "Large Cap Quality", "filter_json": DEFAULT_BALANCED_QUALITY, "weights": None},
    "MID_CAP_QUALITY": {"name": "Mid Cap Quality", "filter_json": DEFAULT_BALANCED_QUALITY, "weights": None},
    "SMALL_CAP_DISCOVERY": {"name": "Small Cap Discovery", "filter_json": {"filters": [
        {"metric": "revenue_growth_yoy", "op": "gt", "value": 15, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.20, "financial_health": 0.20, "growth": 0.35, "competitive_advantage": 0.15, "valuation": 0.10}},
    "MULTIBAGGER_CANDIDATES": {"name": "Multibagger Candidates", "filter_json": {"filters": [
        {"metric": "revenue_growth_yoy", "op": "gt", "value": 20, "relative": "absolute"},
        {"metric": "roic", "op": "gt", "value": 15, "relative": "absolute"},
    ], "logic": "AND"}, "weights": {"quality": 0.25, "financial_health": 0.15, "growth": 0.35, "competitive_advantage": 0.20, "valuation": 0.05}},
    # "overall_score" and "recommendation" live on the Score row, not the per-metric Metric
    # table the generic executor filters against — this strategy is realized by the /v1/rankings
    # endpoint (filters Score.recommendation == 'STRONG_BUY' directly) rather than by a generic
    # metric-filter screen; filters intentionally empty here.
    "STRONG_BUY": {"name": "Strong Buy", "filter_json": {"filters": [], "logic": "AND"}, "weights": None},
}
