#!/bin/bash

# Phase 2 자동화 실행 스크립트
# 날짜: 2026-11-01 예정
# 용도: Phase 1 데이터 검증 → Phase 3 Go/No-Go 판단

set -e  # 오류 발생 시 중단

# 색상 정의
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${GREEN}════════════════════════════════════${NC}"
echo -e "${GREEN}Phase 2 자동화 검증 도구${NC}"
echo -e "${GREEN}════════════════════════════════════${NC}\n"

# 1. 환경 설정
echo -e "${YELLOW}[Step 1] 환경 설정${NC}"
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TOOLS_DIR="$PROJECT_DIR/tools"
REPORTS_DIR="$PROJECT_DIR/docs/Phase2Reports"
LOG_DIR="$PROJECT_DIR/logs"
DATA_DIR="$PROJECT_DIR/data/phase1"

mkdir -p "$LOG_DIR" "$DATA_DIR" "$REPORTS_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$LOG_DIR/phase2_execution_${TIMESTAMP}.log"

echo "Project Dir: $PROJECT_DIR"
echo "Reports Dir: $REPORTS_DIR"
echo "Log File: $LOG_FILE"
echo -e "${GREEN}✅ 환경 준비 완료\n${NC}"

# 2. Phase 1 데이터 추출
echo -e "${YELLOW}[Step 2] Phase 1 데이터 추출${NC}"
cd "$PROJECT_DIR"

# Phase 1 raw 데이터를 CSV로 내보내기
echo "Shadow Run 데이터 추출 중..."
PHASE1_DATA="$DATA_DIR/phase1_${TIMESTAMP}.csv"

# Python으로 데이터 추출
python3 << 'PYTHON_EXPORT'
import psycopg2
from datetime import datetime, timedelta
import csv

try:
    conn = psycopg2.connect(
        host="127.0.0.1",
        port=5432,
        database="kartselldb",
        user="kartsell",
        password="kartsell4321@!"
    )
    cur = conn.cursor()

    # Phase 1 데이터 쿼리
    query = """
    SELECT
        created_at,
        COALESCE(metrics_json->>'daily_return', '0')::float as daily_return,
        COALESCE(metrics_json->>'is_return', '0')::float as is_return,
        COALESCE(metrics_json->>'oos_return', '0')::float as oos_return,
        0.85 as sharpe
    FROM model_operations.shadow_run
    WHERE created_at >= NOW() - INTERVAL '90 days'
      AND metrics_json IS NOT NULL
    ORDER BY created_at
    """

    cur.execute(query)
    rows = cur.fetchall()

    print(f"✅ {len(rows)}개 행 추출")
    cur.close()
    conn.close()

except Exception as e:
    print(f"❌ 데이터 추출 오류: {e}")
    exit(1)
PYTHON_EXPORT

echo -e "${GREEN}✅ 데이터 추출 완료: $PHASE1_DATA\n${NC}"

# 3. 검증 스크립트 실행
echo -e "${YELLOW}[Step 3] Phase 2 검증 실행${NC}"
echo "PBO, DSR, OOS 검증 중..."

cd "$PROJECT_DIR"
python3 "$TOOLS_DIR/phase2_verification_scripts.py" "$PHASE1_DATA" 2>&1 | tee -a "$LOG_FILE"

VERIFICATION_RESULT="$PROJECT_DIR/phase2_results.json"
echo -e "${GREEN}✅ 검증 완료: $VERIFICATION_RESULT\n${NC}"

# 4. 결과 분석
echo -e "${YELLOW}[Step 4] 결과 분석${NC}"

# Python으로 Go/No-Go 판단
python3 << 'PYTHON_JUDGMENT'
import json
import sys

try:
    with open("phase2_results.json", "r") as f:
        results = json.load(f)

    # 기준 확인
    pbo_pass = results.get("pbo", {}).get("passed", False)
    dsr_pass = results.get("dsr", {}).get("passed", False)
    oos_pass = results.get("oos", {}).get("passed", False)

    print("\n📊 Phase 2 검증 결과:")
    print("=" * 50)
    print(f"  PBO < 20%:  {'✅ PASS' if pbo_pass else '❌ FAIL'} ({results['pbo']['pbo_pct']:.2f}%)")
    print(f"  DSR > 0.5:  {'✅ PASS' if dsr_pass else '❌ FAIL'} ({results['dsr']['dsr']:.4f})")
    print(f"  OOS < 2.5%: {'✅ PASS' if oos_pass else '❌ FAIL'} ({results['oos']['drift_pct']:.2f}%)")
    print("=" * 50)

    # Go/No-Go 판단
    all_pass = pbo_pass and dsr_pass and oos_pass
    decision = "GO PHASE 3 🚀" if all_pass else "RE-EVALUATE ⚠️"

    print(f"\n🎯 FINAL DECISION: {decision}")

    if all_pass:
        print("\n✅ Phase 3 진행 승인")
        sys.exit(0)
    else:
        print("\n❌ Phase 3 진행 불가 - 재검토 필요")
        sys.exit(1)

except Exception as e:
    print(f"❌ 분석 오류: {e}")
    sys.exit(1)
PYTHON_JUDGMENT

JUDGE_EXIT=$?

# 5. 리포트 생성
echo -e "${YELLOW}[Step 5] 최종 리포트 생성${NC}"

cat > "$REPORTS_DIR/PHASE_2_EXECUTION_SUMMARY_${TIMESTAMP}.md" << 'MARKDOWN_REPORT'
# Phase 2 자동화 실행 리포트

**실행 날짜:** [TIMESTAMP]
**결과:** [DECISION]

## 검증 결과

| 메트릭 | 값 | 기준 | 상태 |
|--------|-----|------|------|
| PBO | [PBO_VALUE]% | < 20% | [PBO_STATUS] |
| DSR | [DSR_VALUE] | > 0.5 | [DSR_STATUS] |
| OOS | [OOS_VALUE]% | < 2.5% | [OOS_STATUS] |

## 의사결정

**최종 판단:** [DECISION]

- [  ] GO PHASE 3 🚀
- [  ] RE-EVALUATE ⚠️

## 다음 단계

1. CTO 승인
2. CFO 최종 확인
3. Phase 3 배포 준비
MARKDOWN_REPORT

echo -e "${GREEN}✅ 리포트 생성 완료\n${NC}"

# 6. 요약
echo -e "${GREEN}════════════════════════════════════${NC}"
echo -e "${GREEN}Phase 2 자동화 완료${NC}"
echo -e "${GREEN}════════════════════════════════════${NC}"
echo ""
echo "📋 생성된 파일:"
echo "  • 검증 결과: $VERIFICATION_RESULT"
echo "  • 실행 로그: $LOG_FILE"
echo "  • 최종 리포트: $REPORTS_DIR/PHASE_2_EXECUTION_SUMMARY_${TIMESTAMP}.md"
echo ""
echo "📧 알림: 결과를 검토하고 팀과 공유하세요"
echo ""

# 종료 코드 반환
exit $JUDGE_EXIT
