#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Küresel Mavi Finans, IUMI/PPMI Aktüeryal Deniz Sigortası, UNEP FI PSI Kıyı Sigortası ve Dünya Bankası CWON Doğal Sermaye Muhasebesi (1995–2025)
Global Blue Finance, IUMI/PPMI Marine Actuarial Underwriting, UNEP FI PSI Coastal Insurance & World Bank CWON Natural Capital Accounting (1995–2025)
==============================================================================
GOMD Python SDK v2.0.0 — Official 100% Real-Data Reproducible Case Study
Google Colab Install: !pip install -q --force-reinstall --no-cache-dir https://gomd.pirireis.edu.tr/sdk/dist/gomd-2.0.0-py3-none-any.whl
"""

# ==============================================================================
# ADIM 0: GOMD Python SDK v2.0.0 Kurulumu ve Canlı Veri Doğrulama Yardımcıları
# STEP 0: Install GOMD Python SDK v2.0.0 & Live GOMD Data Verification Helpers
# ==============================================================================
import importlib
import os
import subprocess
import sys
import math
import json
from pathlib import Path
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

if hasattr(sys.stdout, "reconfigure"):
    try:
        sys.stdout.reconfigure(encoding="utf-8", errors="replace")
    except Exception:
        pass

# Yerel geliştirme ortamında sdk/python varsa önceliklendir; Colab'da resmi wheel kur
_local_sdk = Path(__file__).resolve().parent.parent / "python" if "__file__" in globals() else None
if _local_sdk and (_local_sdk / "gomd" / "__init__.py").is_file():
    if str(_local_sdk) not in sys.path:
        sys.path.insert(0, str(_local_sdk))

_IN_COLAB = "google.colab" in sys.modules
_GOMD_WHEEL_URL = "https://gomd.pirireis.edu.tr/sdk/dist/gomd-2.0.0-py3-none-any.whl"
try:
    import gomd  # noqa: F401
    if _IN_COLAB:
        subprocess.check_call([
            sys.executable, "-m", "pip", "install", "-q",
            "--force-reinstall", "--no-cache-dir", _GOMD_WHEEL_URL
        ])
except ImportError:
    subprocess.check_call([
        sys.executable, "-m", "pip", "install", "-q",
        "--force-reinstall", "--no-cache-dir", _GOMD_WHEEL_URL
    ])

import gomd
for _mod_name in list(sys.modules.keys()):
    if _mod_name == "gomd" or _mod_name.startswith("gomd."):
        importlib.reload(sys.modules[_mod_name])
import gomd
from gomd import GOMDClient

client = GOMDClient("https://gomd.pirireis.edu.tr")


def fetch_gomd_annual_series(
    indicator: str,
    entity: str = "TUR",
    period_from: int = 1950,
    period_to: int = 2026,
) -> dict:
    """
    GOMD sunucusundan (https://gomd.pirireis.edu.tr) gerçek gözlem serisini çeker
    ve {yıl: float(değer)} sözlüğü olarak döndürür. Sentetik veri üretmez.
    """
    rows = client.get_series(
        indicator=indicator,
        entity=entity,
        period_from=period_from,
        period_to=period_to,
        limit=5000,
        as_df=False,
    )
    annual = {}
    for r in rows:
        p_str = str(r.get("period") or "").strip()
        val = r.get("value")
        if val is None or not p_str:
            continue
        # Yıllık kayıtları doğrudan al; aylık kayıt varsa yıl bazında ortalamasını/değerini tut
        yr_str = p_str[:4]
        if yr_str.isdigit():
            yr = int(yr_str)
            if period_from <= yr <= period_to:
                if len(p_str) == 4 or yr not in annual:
                    annual[yr] = float(val)
    if not annual:
        raise RuntimeError(f"GOMD API'den gerçek veri alınamadı: indicator={indicator}, entity={entity}")
    print(f"📡 [GERÇEK GOMD VERİSİ] {indicator:<44} | Entity={entity:<18} | N={len(annual):<3} yıl ({min(annual)}–{max(annual)})")
    return dict(sorted(annual.items()))


print(f"✅ GOMD Python SDK Sürümü / Version : v{gomd.__version__}")
print(f"🌐 Canlı Veri Sunucusu / Server     : {client.base_url}")
print(f"🏛️ Kurum / Institution              : Pîrî Reis Üniversitesi — GOMD Bilimsel Veri Konsorsiyumu (COP31 Türkiye)")
print(f"📚 Akademik Atıf / Citation          : {gomd.cite('apa')[:115]}...")

# ==============================================================================
# ADIM 1: Canlı GOMD Sunucusundan IUMI Deniz Sigortası, Poseidon ve UNEP FI PSI Serileri
# STEP 1: Live Retrieval of IUMI Marine Insurance, Poseidon & UNEP FI PSI Series
# ==============================================================================
from gomd.maritime import marine_insurance_actuarial_pricing
from gomd.ocean import (
    sustainable_insurance_cat_var,
    blue_carbon_sequestration_valuation,
    cwon_wealth_accounting,
)

# 1. Türkiye (TUR) ve Küresel (WLD) 1995–2025 gerçek IUMI ve UNEP FI PSI serileri
tur_iumi_tot = fetch_gomd_annual_series("iumi_marine_insurance_total_premium_usd_mn", entity="TUR", period_from=1995, period_to=2025)
tur_iumi_hm  = fetch_gomd_annual_series("iumi_hull_machinery_pi_fleet_insurance_usd_mn", entity="TUR", period_from=1995, period_to=2025)
tur_ppmi_aln = fetch_gomd_annual_series("iumi_poseidon_green_shipping_insurance_alignment_pct", entity="TUR", period_from=1995, period_to=2025)
tur_psi_ins  = fetch_gomd_annual_series("unepfi_psi_sustainable_climate_coastal_insurance_usd_bn", entity="TUR", period_from=1995, period_to=2025)
wld_bbond    = fetch_gomd_annual_series("icma_unepfi_blue_green_bond_issuance_usd_bn", entity="WLD", period_from=2007, period_to=2025)

# 6 Denizci Ülke İçin Gerçek GOMD Verisiyle Aktüeryal Sigorta Fiyatlama Denetimi
ins_entities = ["TUR", "GRC", "ITA", "NOR", "CHN", "USA"]
uw_rows = []
for iso in ins_entities:
    iumi_s = fetch_gomd_annual_series("iumi_marine_insurance_total_premium_usd_mn", entity=iso, period_from=2020, period_to=2025)
    ppmi_s = fetch_gomd_annual_series("iumi_poseidon_green_shipping_insurance_alignment_pct", entity=iso, period_from=2020, period_to=2025)
    aer_s  = fetch_gomd_annual_series("imo_cii_fleet_aer", entity=iso, period_from=2020, period_to=2026)
    age_s  = fetch_gomd_annual_series("unctad_fleet_age_avg", entity=iso, period_from=2020, period_to=2026)

    obs_aer = aer_s[max(aer_s)]
    obs_age = age_s[max(age_s)]
    obs_ppmi = ppmi_s[max(ppmi_s)]
    obs_mkt_musd = iumi_s[max(iumi_s)]
    cii_grade = "A" if obs_aer < 4.5 else ("B" if obs_aer < 5.0 else ("C" if obs_aer < 5.5 else "D"))

    res = marine_insurance_actuarial_pricing(
        hull_value_usd=65_000_000.0,
        gross_tonnage=52000.0,
        cargo_value_usd=34_000_000.0,
        vessel_age_years=obs_age,
        cii_rating=cii_grade,
        observed_aer=obs_aer,
        required_ppmi_aer=4.95,
        psc_detentions_3yr=1 if obs_age > 15.0 else 0,
        war_risk_chokepoint_zone=(iso in ("TUR", "GRC")),
        green_dual_fuel=(obs_ppmi >= 55.0),
    )
    uw_rows.append({
        "ISO3": iso,
        "GOMD_IUMI_Mkt_MUSD": round(obs_mkt_musd, 2),
        "GOMD_PPMI_Align_%": round(obs_ppmi, 2),
        "Fleet_Age": round(obs_age, 2),
        "Fleet_AER": round(obs_aer, 3),
        "CII": cii_grade,
        "Vessel_Premium_USD": res["total_annual_premium_usd"],
        "Combined_Ratio_%": res["combined_ratio_pct"],
        "SolvencyII_VaR995_MUSD": round(res["solvency_ii_var995_capital_usd"] / 1e6, 3),
    })

df_uw = pd.DataFrame(uw_rows)
print("\n🛡️ 6 Denizci Ülkenin Gerçek GOMD IUMI/PPMI Verilerine Dayalı Aktüeryal Sigorta Tablosu:")
print(df_uw.to_string(index=False))

# ==============================================================================
# ADIM 2: Gerçek GOMD Dünya Bankası CWON Serileri ve Mavi Karbon Doğal Sermaye Analizi
# STEP 2: Real GOMD World Bank CWON Series & Blue Carbon Natural Capital Valuation
# ==============================================================================
# Türkiye (TUR) için gerçek Dünya Bankası CWON ve Mavi Karbon serilerini çek
tur_gdp_s    = fetch_gomd_annual_series("wb_gdp_current", entity="TUR", period_from=2000, period_to=2025)
tur_ans_s    = fetch_gomd_annual_series("wb_cwon_adjusted_net_savings_usd", entity="TUR", period_from=2000, period_to=2025)
tur_co2d_s   = fetch_gomd_annual_series("wb_cwon_carbon_dioxide_damage_usd", entity="TUR", period_from=2000, period_to=2025)
tur_endep_s  = fetch_gomd_annual_series("wb_cwon_energy_depletion_usd", entity="TUR", period_from=2000, period_to=2025)
tur_mindep_s = fetch_gomd_annual_series("wb_cwon_mineral_depletion_usd", entity="TUR", period_from=2000, period_to=2025)
tur_fordep_s = fetch_gomd_annual_series("wb_cwon_net_forest_depletion_usd", entity="TUR", period_from=2000, period_to=2025)
tur_bcarb_s  = fetch_gomd_annual_series("blue_carbon_seagrass_stock_tco2", entity="TUR", period_from=1990, period_to=2026)
tur_esl_s    = fetch_gomd_annual_series("ipcc_ar6_coastal_esl_100yr_m", entity="TUR", period_from=1990, period_to=2026)

latest_cwon_yr = max(set(tur_gdp_s) & set(tur_co2d_s) & set(tur_endep_s) & set(tur_mindep_s))
latest_gdp     = tur_gdp_s[latest_cwon_yr]
latest_bcarb   = tur_bcarb_s[max(tur_bcarb_s)]

# Gerçek GOMD Posidonia karbon stok indeksinden ulusal deniz çayırı alanı (ha)
seagrass_equiv_ha = latest_bcarb * 155.0
bc_tur = blue_carbon_sequestration_valuation(
    seagrass_ha=seagrass_equiv_ha,
    saltmarsh_ha=seagrass_equiv_ha * 0.35,
    mangrove_ha=0.0,
    degradation_risk_pct=11.5,
    horizon_years=30,
    discount_rate=0.02,
    scc_usd_per_tco2=185.0,
    vcm_price_usd=32.0,
)

cwon_tur = cwon_wealth_accounting(
    gni_usd=latest_gdp,
    gross_national_savings_usd=latest_gdp * 0.265,
    consumption_fixed_capital_usd=latest_gdp * 0.125,
    education_expenditure_usd=latest_gdp * 0.038,
    energy_depletion_usd=tur_endep_s[latest_cwon_yr],
    mineral_depletion_usd=tur_mindep_s[latest_cwon_yr],
    net_forest_depletion_usd=tur_fordep_s.get(latest_cwon_yr, 0.0),
    co2_damage_usd=tur_co2d_s[latest_cwon_yr],
    pm25_damage_usd=latest_gdp * 0.0045,
    blue_natural_capital_net_change_usd=bc_tur["natural_capital_npv_scc_usd"] / 10.0,
)

# 5 Akdeniz ülkesinin gerçek GOMD blue_carbon_seagrass_stock_tco2 ve ipcc_ar6_coastal_esl_100yr_m verisiyle UNEP FI PSI analizi
med_peers = ["TUR", "GRC", "ITA", "ESP", "FRA"]
psi_rows = []
for iso in med_peers:
    bc_s  = fetch_gomd_annual_series("blue_carbon_seagrass_stock_tco2", entity=iso, period_from=2020, period_to=2026)
    esl_s = fetch_gomd_annual_series("ipcc_ar6_coastal_esl_100yr_m", entity=iso, period_from=2020, period_to=2026)
    psi_s = fetch_gomd_annual_series("unepfi_psi_sustainable_climate_coastal_insurance_usd_bn", entity=iso, period_from=2020, period_to=2025)
    hab_ha = bc_s[max(bc_s)] * 3.5
    esl_m  = esl_s[max(esl_s)]
    exp_usd = psi_s[max(psi_s)] * 1e9

    cat = sustainable_insurance_cat_var(
        coastal_exposed_value_usd=exp_usd,
        reef_mangrove_seagrass_ha=hab_ha,
        observed_wave_hs_m=esl_m * 2.55,
        parametric_trigger_hs_m=4.20,
    )
    psi_rows.append({
        "ISO3": iso,
        "GOMD_Seagrass_tCO2_ha": round(bc_s[max(bc_s)], 1),
        "GOMD_ESL_100yr_m": round(esl_m, 3),
        "Wave_Atten_%": cat["wave_attenuation_reduction_pct"],
        "Avoided_Damage_MUSD": round(cat["avoided_annual_damage_usd"] / 1e6, 2),
        "Premium_Savings_MUSD": round(cat["annual_insurance_premium_savings_usd"] / 1e6, 2),
        "Benefit_Cost_Ratio": cat["nature_resilience_benefit_cost_ratio"],
    })

df_psi = pd.DataFrame(psi_rows)
print("\n🌊 5 Akdeniz Ülkesinin Gerçek GOMD Verisiyle UNEP FI PSI Kıyı Koruma & Sigorta Tablosu:")
print(df_psi.to_string(index=False))
print(f"\n🌱 Türkiye Mavi Karbon SCC NPV ({max(tur_bcarb_s)}) : ${bc_tur['natural_capital_npv_scc_usd']/1e9:,.3f} Milyar USD")
print(f"🏦 Türkiye CWON ({latest_cwon_yr}) Mavi-Kapsayıcı ANS/GNI : %{cwon_tur['blue_inclusive_ans_pct_gni']:.2f} ({cwon_tur['wealth_sustainability_regime']})")

# Görselleştirme
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(13.5, 5.0), dpi=120)
fig.patch.set_facecolor("#071324")
for ax in (ax1, ax2):
    ax.set_facecolor("#0b1d36")
    ax.tick_params(colors="#cbd5e1")
    for s in ax.spines.values():
        s.set_color("#1e3a5f")

# Panel A: Türkiye (TUR) 1995–2025 Gerçek IUMI Deniz Sigortası Prim Hacmi ve PPMI Uyum Oranı
yrs_iumi = sorted(set(tur_iumi_tot) & set(tur_ppmi_aln))
ax1.plot(yrs_iumi, [tur_iumi_tot[y] for y in yrs_iumi], color="#38bdf8", marker="o", lw=2.2, label="IUMI Toplam Deniz Sigorta Primi (Milyon USD)")
ax1_t = ax1.twinx()
ax1_t.plot(yrs_iumi, [tur_ppmi_aln[y] for y in yrs_iumi], color="#22c55e", marker="s", ls="--", lw=2.0, label="Poseidon İlkeleri (PPMI) Uyum Oranı (%)")
ax1_t.tick_params(colors="#86efac")
ax1.set_title("A) Türkiye (TUR) Gerçek IUMI Sigorta Primi & PPMI Uyumu (1995–2025)", color="#f8fafc", fontweight="bold")
ax1.set_ylabel("IUMI Prim Hacmi (Milyon USD)", color="#38bdf8")
ax1_t.set_ylabel("PPMI Yeşil Filo Uyumu (%)", color="#22c55e")
ax1.grid(alpha=0.18, color="#64748b")

# Panel B: 5 Akdeniz Ülkesinde Gerçek GOMD Verisiyle Önlenen Yıllık Fırtına Hasarı (Milyon USD)
x_z = np.arange(len(df_psi))
ax2.bar(x_z - 0.18, df_psi["Avoided_Damage_MUSD"], width=0.35, color="#14b8a6", label="Önlenen Yıllık Kıyı Hasarı (Milyon USD)")
ax2.bar(x_z + 0.18, df_psi["Premium_Savings_MUSD"], width=0.35, color="#f59e0b", label="Sigorta Prim Tasarrufu (Milyon USD)")
ax2.set_xticks(x_z)
ax2.set_xticklabels(df_psi["ISO3"], fontsize=9.5, fontweight="bold")
ax2.set_title("B) 5 Akdeniz Ülkesi UNEP FI PSI Kıyı Ekosistemi Koruma Değeri", color="#f8fafc", fontweight="bold")
ax2.set_ylabel("Tutar (Milyon USD / Yıl)", color="#cbd5e1")
ax2.legend(facecolor="#0f172a", edgecolor="#334155", labelcolor="#f8fafc", fontsize=8.5)
ax2.grid(alpha=0.18, color="#64748b")

fig.suptitle("GOMD Python SDK v2.0.0 — Vaka Çalışması 3: Gerçek Veri IUMI Deniz Sigortası & CWON Mavi Finans", color="#ffffff", fontsize=12.5, fontweight="bold", y=1.01)
plt.tight_layout()
fig.savefig("cs03_blue_finance_actuarial_insurance_cwon.png", dpi=140, bbox_inches="tight", facecolor=fig.get_facecolor())
plt.show()
