#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Küresel Deniz Ticareti, Konteyner Liman Trafiği (TEU), UNCTAD LSCI Doğrusal Bağlantılılık, Dünya Bankası LPI ve OECD Mavi Ekonomi GSYH Paneli (1970–2025)
Global Maritime Trade, Container Port Throughput (TEU), UNCTAD LSCI, World Bank LPI & OECD Ocean Economy GDP Panel (1970–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 WTO Ticaret, Liman TEU, LSCI, LPI ve OECD Serileri
# STEP 1: Live Retrieval of WTO Trade, Port TEU, LSCI, LPI & OECD Ocean GDP Series
# ==============================================================================
from gomd.stats import (
    panel_fixed_effects,
    cointegration_eg_test,
    mann_kendall_sen,
    pettitt_changepoint,
)

# 1. Türkiye (TUR) 1970–2025 WTO İhracat/İthalat, Liman TEU ve OECD Mavi Ekonomi GSYH Payı
tur_exp  = fetch_gomd_annual_series("wto_wb_merchandise_exports_usd", entity="TUR", period_from=1970, period_to=2025)
tur_imp  = fetch_gomd_annual_series("wto_wb_merchandise_imports_usd", entity="TUR", period_from=1970, period_to=2025)
tur_teu  = fetch_gomd_annual_series("wb_port_traffic", entity="TUR", period_from=2000, period_to=2025)
tur_lsci = fetch_gomd_annual_series("wb_liner_connectivity_annual", entity="TUR", period_from=2006, period_to=2024)
tur_lpi  = fetch_gomd_annual_series("lpi_wb_overall_score", entity="TUR", period_from=2007, period_to=2024)
tur_ogdp = fetch_gomd_annual_series("oecd_ocean_economy_gdp_share_pct", entity="TUR", period_from=1995, period_to=2025)
tur_capx = fetch_gomd_annual_series("unctad_imo_maritime_decarbonization_capex_usd_bn", entity="TUR", period_from=1995, period_to=2025)

# 2. 6 Deniz Ticaret Ekonomisinde Çok Ülkeli Karşılaştırma ve Sabit Etkiler (FE) Panel Tahmini
trade_countries = ["TUR", "CHN", "DEU", "ITA", "ESP", "GRC"]
trade_summary = []
fe_trade_rows = []

for iso in trade_countries:
    exp_s  = fetch_gomd_annual_series("wto_wb_merchandise_exports_usd", entity=iso, period_from=2006, period_to=2025)
    imp_s  = fetch_gomd_annual_series("wto_wb_merchandise_imports_usd", entity=iso, period_from=2006, period_to=2025)
    lsci_s = fetch_gomd_annual_series("wb_liner_connectivity_annual", entity=iso, period_from=2006, period_to=2024)
    lpi_s  = fetch_gomd_annual_series("lpi_wb_overall_score", entity=iso, period_from=2007, period_to=2024)

    common_t = sorted(set(exp_s) & set(imp_s) & set(lsci_s))
    for y in common_t:
        tot_trade_bn = (exp_s[y] + imp_s[y]) / 1e9
        fe_trade_rows.append({
            "ISO3": iso,
            "year": y,
            "log_trade_bn": math.log(max(tot_trade_bn, 1.0)),
            "log_lsci": math.log(max(lsci_s[y], 1.0)),
        })

    ly_tr = max(set(exp_s) & set(imp_s))
    ly_ls = max(lsci_s)
    ly_lp = max(lpi_s)
    trade_summary.append({
        "ISO3": iso,
        "WTO_Exports_BnUSD": round(exp_s[ly_tr] / 1e9, 2),
        "WTO_Imports_BnUSD": round(imp_s[ly_tr] / 1e9, 2),
        "Total_Trade_BnUSD": round((exp_s[ly_tr] + imp_s[ly_tr]) / 1e9, 2),
        "UNCTAD_LSCI": round(lsci_s[ly_ls], 2),
        "WB_LPI_Score": round(lpi_s[ly_lp], 3),
    })

df_trade = pd.DataFrame(trade_summary)
fe_trade = panel_fixed_effects(fe_trade_rows, entity_col="ISO3", y_col="log_trade_bn", x_col="log_lsci")
mk_teu = mann_kendall_sen(list(tur_teu.values()), t=list(tur_teu.keys()))
yrs_teu_exp = sorted(set(tur_teu) & set(tur_exp))
eg_teu_exp = cointegration_eg_test([tur_teu[y] / 1e6 for y in yrs_teu_exp], [tur_exp[y] / 1e9 for y in yrs_teu_exp])

print("\n🚢 6 Deniz Ticaret Ekonomisinde Gerçek WTO Ticaret, UNCTAD LSCI ve Dünya Bankası LPI Tablosu:")
print(df_trade.to_string(index=False))
print(f"\n📈 Türkiye (TUR) Konteyner Liman Trafiği (TEU) Trendi : +{mk_teu['theil_sen_slope']/1e6:.3f} Milyon TEU/yıl (Son Gözlem = {tur_teu[max(tur_teu)]/1e6:.2f} Milyon TEU)")
print(f"📊 Deniz Ticareti Sabit Etkiler (FE) Panel Regresyonu (N={fe_trade['n_obs']} gözlem, Within R² = {fe_trade['r_squared_within']:.4f}):")
print(f"   • log(UNCTAD LSCI) -> log(Dış Ticaret) Esnekliği (β_FE) : {fe_trade['beta_fe']:+.4f} (SE = {fe_trade['std_error']:.4f}, t = {fe_trade['t_stat']:.2f}, p = {fe_trade['p_value']:.4e})")
print(f"   • Türkiye Liman TEU <-> WTO İhracat Eşbütünleşme Eğimi  : +{eg_teu_exp['long_run_slope_beta']:.2f} Milyar USD / Milyon TEU (ADF t = {eg_teu_exp['engle_granger_adf_t_stat']:.3f})")

# ==============================================================================
# ADIM 2: Türkiye Konteyner Liman Trafiği (TEU), WTO İhracatı ve Mavi Ekonomi GSYH
# STEP 2: Visualization of Türkiye Container Port Traffic (TEU), Exports & Ocean GDP
# ==============================================================================
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) Gerçek Konteyner Liman Trafiği (Milyon TEU) ve WTO Mal İhracatı (Milyar USD)
yrs_teu = sorted(set(tur_teu) & set(tur_exp))
ax1.bar(yrs_teu, [tur_teu[y] / 1e6 for y in yrs_teu], color="#38bdf8", alpha=0.82, label="Türkiye Konteyner Liman Trafiği (Milyon TEU)")
ax1_t = ax1.twinx()
ax1_t.plot(yrs_teu, [tur_exp[y] / 1e9 for y in yrs_teu], color="#22c55e", marker="o", lw=2.2, label="WTO Mal İhracatı (Milyar USD)")
ax1_t.tick_params(colors="#86efac")
ax1.set_title("A) Türkiye (TUR) Konteyner Liman Trafiği (TEU) & WTO İhracatı", color="#f8fafc", fontweight="bold")
ax1.set_ylabel("Konteyner Liman Trafiği (Milyon TEU)", color="#38bdf8")
ax1_t.set_ylabel("WTO Mal İhracatı (Milyar USD)", color="#22c55e")
ax1.grid(alpha=0.18, color="#64748b")

# Panel B: Türkiye (TUR) OECD Okyanus Ekonomisi GSYH Payı (%) ve Denizcilik Karbonsuzlaştırma CapEx (Milyar USD)
yrs_ogdp = sorted(set(tur_ogdp) & set(tur_capx))
ax2.plot(yrs_ogdp, [tur_ogdp[y] for y in yrs_ogdp], color="#14b8a6", marker="o", lw=2.2, label="OECD Okyanus Ekonomisi GSYH Payı (%)")
ax2_t = ax2.twinx()
ax2_t.plot(yrs_ogdp, [tur_capx[y] for y in yrs_ogdp], color="#f59e0b", marker="s", ls="--", lw=2.0, label="UNCTAD/IMO Karbonsuzlaştırma CapEx (Milyar USD)")
ax2_t.tick_params(colors="#fcd34d")
ax2.set_title("B) Türkiye Okyanus Ekonomisi GSYH Payı & Karbonsuzlaştırma CapEx (1995–2025)", color="#f8fafc", fontweight="bold")
ax2.set_ylabel("Okyanus Ekonomisi GSYH Payı (%)", color="#14b8a6")
ax2_t.set_ylabel("Karbonsuzlaştırma CapEx (Milyar USD)", color="#f59e0b")
ax2.grid(alpha=0.18, color="#64748b")

fig.suptitle("GOMD Python SDK v2.0.0 — Vaka Çalışması 10: Gerçek Veri Deniz Ticareti, Liman TEU, LSCI & Mavi Ekonomi", color="#ffffff", fontsize=12.5, fontweight="bold", y=1.01)
plt.tight_layout()
fig.savefig("cs10_maritime_trade_port_connectivity_logistics_panel.png", dpi=140, bbox_inches="tight", facecolor=fig.get_facecolor())
plt.show()
