from __future__ import annotations

import json
from pathlib import Path
import sys


ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(ROOT / "src"))

from fundamental_mvp.config import load_settings
from fundamental_mvp.financial import extract_financial_pit
from fundamental_mvp.inventory import run_inventory
from fundamental_mvp.price import build_daily_price
from fundamental_mvp.fundamentals import build_fundamentals
from fundamental_mvp.hotspot import build_hotspots
from fundamental_mvp.governance import refresh_governance_data
from fundamental_mvp.financial_sector import refresh_financial_sector_data
from fundamental_mvp.quality_signals import build_quality_signals


def main() -> None:
    settings = load_settings(ROOT / "config" / "local_paths.toml")
    finance = extract_financial_pit(settings)
    price = build_daily_price(settings)
    summary = run_inventory(settings)
    governance = refresh_governance_data(settings)
    financial_sector = refresh_financial_sector_data(settings)
    fundamentals = build_fundamentals(settings)
    quality_signals = build_quality_signals(settings)
    hotspots = build_hotspots(settings)
    summary["financial_build"] = {
        "rebuilt": finance.rebuilt,
        "rows": finance.rows,
        "stocks": finance.stocks,
        "output_path": str(finance.output_path),
    }
    summary["price_build"] = {
        "rebuilt": price.rebuilt,
        "rows": price.rows,
        "stocks": price.stocks,
        "output_path": str(price.output_path),
    }
    summary["fundamental_build"] = {
        "rows": fundamentals.rows,
        "scored": fundamentals.scored,
        "hard_failed": fundamentals.hard_failed,
        "output_path": str(fundamentals.output_path),
    }
    summary["governance_build"] = {
        "refreshed": governance.refreshed,
        "pledge_rows": governance.pledge_rows,
        "announcement_rows": governance.announcement_rows,
        "risk_flags": governance.risk_flags,
        "output_path": str(governance.output_path),
    }
    summary["financial_sector_build"] = {
        "rebuilt": financial_sector.rebuilt,
        "rows": financial_sector.rows,
        "report_period": financial_sector.report_period,
        "output_path": str(financial_sector.output_path),
        "warning": financial_sector.warning,
    }
    if financial_sector.warning:
        # Surface the degradation where people actually look: the dashboard's
        # "解释边界" panel is rendered from m1 limitations.
        summary.setdefault("limitations", []).append(financial_sector.warning)
    summary["quality_signal_build"] = {
        "rows": quality_signals.rows,
        "covered": quality_signals.covered,
        "output_path": str(quality_signals.output_path),
    }
    summary["hotspot_build"] = {
        "industries": hotspots.industries,
        "hot_industries": hotspots.hot_industries,
        "candidates": hotspots.candidates,
        "output_path": str(hotspots.output_path),
    }
    (settings.report_dir / "m1_run_summary.json").write_text(
        json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8"
    )
    print(json.dumps(summary, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
