"""
19_case_studies.py
案例研究模块：希腊"危机后重建"与美国"高基准温和波动"深度案例
Case Studies Module: Greece "post-crisis reconstruction" and USA "mild fluctuation
around a high baseline" deep-dive cases

用途 / Purpose:
    为报告的案例笔记（Case Notes）章节生成结构化的案例叙事数据：
    逐年 V/C/F/RE 分数、关键转折年份标记、与区域均值的差距曲线。
    希腊案例聚焦 2000-2023 期间 +41.0 分（OECD-38 最大增幅）的
    "危机后重建"叙事；美国案例聚焦长期高基准下的窄幅波动叙事。

依赖 / Dependencies: pandas, numpy
"""

import logging
from pathlib import Path

import pandas as pd

logging.basicConfig(level=logging.INFO, format="%(asctime)s  %(message)s")
log = logging.getLogger("19_case_studies")

DATA_DIR = Path("./data")

CASE_COUNTRIES = {
    "GRC": {
        "name_zh": "希腊", "name_en": "Greece",
        "narrative_zh": "危机后重建带来的显著制度追赶",
        "narrative_en": "A Marked Institutional Catch-Up After Crisis Reconstruction",
        "key_years": [2010, 2015, 2018, 2023],
    },
    "USA": {
        "name_zh": "美国", "name_en": "United States",
        "narrative_zh": "高基准水平下的温和波动",
        "narrative_en": "Mild Fluctuation Around a High Baseline",
        "key_years": [2008, 2009, 2020, 2023],
    },
}


def main():
    scores = pd.read_csv(DATA_DIR / "panel_re_scores.csv")

    case_records = []
    for iso3, meta in CASE_COUNTRIES.items():
        country_panel = scores[scores["iso3"] == iso3].sort_values("year")
        if country_panel.empty:
            log.warning("No data found for case-study country %s", iso3)
            continue

        first_year = country_panel["year"].min()
        last_year = country_panel["year"].max()
        first_score = country_panel[country_panel["year"] == first_year]["re_score"].iloc[0]
        last_score = country_panel[country_panel["year"] == last_year]["re_score"].iloc[0]
        total_change = round(float(last_score - first_score), 2)

        region_mean = scores.groupby("year")["re_score"].mean()
        gap_series = country_panel.set_index("year")["re_score"] - region_mean

        log.info(
            "%s (%s): %d -> %d change = %+.2f (narrative: %s)",
            meta["name_en"], iso3, first_year, last_year, total_change, meta["narrative_en"],
        )

        for _, row in country_panel.iterrows():
            case_records.append({
                "iso3": iso3,
                "name_zh": meta["name_zh"],
                "name_en": meta["name_en"],
                "year": int(row["year"]),
                "v_score": row["v_score"],
                "c_score": row["c_score"],
                "f_score": row["f_score"],
                "re_score": row["re_score"],
                "gap_vs_sample_mean": round(float(gap_series.get(row["year"], float("nan"))), 2),
                "is_key_year": row["year"] in meta["key_years"],
                "total_change_2000_2023": total_change,
            })

    out = pd.DataFrame(case_records)
    out.to_csv(DATA_DIR / "case_study_narratives.csv", index=False)
    log.info("Case study narrative data saved -> data/case_study_narratives.csv")


if __name__ == "__main__":
    main()
