#!/usr/bin/env python3
"""P6_01: 가치보존형 현금확보 — 5,913만원 부족액 최소 훼손으로 조성"""

from __future__ import annotations
import json, sys
from pathlib import Path
from datetime import datetime

ROOT = Path(__file__).resolve().parent.parent
OUTPUT = ROOT / "Temp" / "p6_01_cash_optimizer_spec.json"

if sys.stdout.encoding and sys.stdout.encoding.lower() not in ("utf-8", "utf8"):
    sys.stdout = open(sys.stdout.fileno(), mode="w", encoding="utf-8", buffering=1)

def build_spec() -> dict:
    return {
        "schema_version": "cash_recovery_optimizer_v1",
        "generated_at": datetime.now().isoformat(),
        "problem": {
            "current_cash_pct": 3.86,
            "target_cash_pct": 15.0,
            "shortfall_krw": 41342219,
            "cash_floor_status": "BELOW_FLOOR",
            "market_regime": "BREAKDOWN"
        },
        "objective": "현금 부족액 충족 AND 주식가치 훼손 최소 (raw <= 10%)",
        "approach": "K2 50/50 분할: immediate_qty + rebound_wait_qty",
        "key_rules": {
            "rule_1": "K2 즉시 50% / 반등 대기 50% (rebound_trigger_price 전 실행 금지)",
            "rule_2": "매도 순서: K3 regime_adjusted_sell_priority 사용 (코어 주도주 마지막)",
            "rule_3": "value_damage_raw_pct <= 10% 상한 (cap_pass=false 허용 안함)",
            "rule_4": "emergency_full_sell=true 조건: half_expected*2 < shortfall_min 일 때만"
        },
        "formulas": {
            "rebound_trigger_price": "prevClose + 0.5*ATR20 (tick 정규화)",
            "value_damage_raw": "sum(target_sell_krw) / current_portfolio_value * 100"
        },
        "implementation": [
            "spec/exit/cash_recovery.yaml",
            "gas_data_feed.gs: calcCashRecoveryOptimizerV1_()",
            "tools/validate_value_preservation_v1.py (raw <= 10% 검증)"
        ],
        "sample_case": {
            "current_asset": 394191813,
            "shortfall": 41342219,
            "target_damage": "10% max",
            "expected_recovery": 37108765
        }
    }

def main() -> int:
    print("=" * 70)
    print("  P6_01: 가치보존형 현금확보")
    print("=" * 70)
    spec = build_spec()
    OUTPUT.write_text(json.dumps(spec, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"\n✓ 현금 최적화 스펙 저장: {OUTPUT.name}")
    print(f"  문제: 현금 3.86% → 목표 15% (부족액: 4,134만원)")
    print(f"  해결: K2 50/50 분할매도 + value_damage <= 10% 유지")
    print(f"  순서: K3 우선순위 적용 (코어 주도주 마지막)")
    return 0

if __name__ == "__main__":
    sys.exit(main())
