# Manager Formatter
# 출력 포맷팅 함수들

from typing import Dict, List

from .data import MANAGERS


def _format_output(result: Dict) -> str:
    """결과를 읽기 좋은 형식으로 포맷팅합니다."""
    lines = []

    # Claude 지시문
    lines.append("=" * 50)
    lines.append("⚠️ CLAUDE INSTRUCTION")
    lines.append("=" * 50)
    lines.append("")
    lines.append("아래는 RAW 데이터입니다. **절대 그대로 보여주지 마세요.**")
    lines.append("")
    lines.append("다음 형식으로 **재구성**하여 사용자에게 전달하세요:")
    lines.append("")
    lines.append("```")
    lines.append("## 🏢 C-Level 회의록")
    lines.append("")
    lines.append("**👔 PM**: [현재 상황 설명]")
    lines.append("**🛠️ CTO**: [기술적 의견 - PM에 반응]")
    lines.append("**🧪 QA**: [품질/테스트 관점]")
    lines.append("**💰 CFO**: [비용/재무 관점]")
    lines.append("**📢 CMO**: [마케팅 관점]")
    lines.append("**👔 PM**: [정리하며 마무리]")
    lines.append("")
    lines.append("---")
    lines.append("")
    lines.append("## 📋 최종 정리")
    lines.append("")
    lines.append("### 현재 상태")
    lines.append("| 항목 | 상태 |")
    lines.append("|------|------|")
    lines.append("")
    lines.append("### 즉시 할 일 (이번 주)")
    lines.append("| # | 작업 | 왜? |")
    lines.append("|---|------|-----|")
    lines.append("")
    lines.append("### 이번 달 할 일")
    lines.append("")
    lines.append("### 보류")
    lines.append("")
    lines.append("### 주의 사항 (NEVER/ALWAYS)")
    lines.append("```")
    lines.append("")
    lines.append("**규칙:**")
    lines.append("1. 회의록은 매니저들이 **서로 대화**하는 것처럼 자연스럽게")
    lines.append("2. **구체적**으로 (파일명, 함수명, 숫자 포함)")
    lines.append("3. RAW 데이터의 질문들을 **답변/의견**으로 변환")
    lines.append("4. 컨텍스트를 파악해서 **인사이트** 제공")
    lines.append("")
    lines.append("=" * 50)
    lines.append("📊 RAW DATA (아래 데이터 기반으로 위 형식 작성)")
    lines.append("=" * 50)
    lines.append("")

    # 1. 상황 분석
    lines.append("## 1️⃣ 상황 분석")
    lines.append("")

    topics = result['context_analysis']['detected_topics']
    lines.append(f"**감지된 토픽**: {', '.join(topics)}")

    lines.append("")
    lines.append("**참여 매니저**:")
    for m in result["active_managers"]:
        info = MANAGERS[m]
        lines.append(f"- {info['emoji']} **{info['title']}**: {', '.join(info['focus'][:2])}")
    lines.append("")

    if result["warnings"]:
        lines.append("**🚨 경고**:")
        for warning in result["warnings"]:
            lines.append(f"- {warning}")
        lines.append("")

    lines.append("---")
    lines.append("")

    # 2. 회의록
    lines.append("## 2️⃣ 회의록")
    lines.append("")

    conversation = _generate_conversation(result)
    for line in conversation:
        lines.append(line)

    lines.append("")
    lines.append("---")
    lines.append("")

    # 3. 최종 정리
    lines.append("## 3️⃣ 최종 정리")
    lines.append("")

    lines.append("### 현재 상태")
    lines.append("")
    lines.append("| 영역 | 상태 | 비고 |")
    lines.append("|------|------|------|")

    for m in result["active_managers"][:5]:
        feedback = result["feedback"][m]
        status = "🚨 위험" if feedback["warnings"] else ("⚠️ 주의" if feedback["concerns"] else "✅ 양호")
        if feedback.get("opinions"):
            note = feedback["opinions"][0]
        elif feedback["warnings"]:
            note = feedback["warnings"][0]
        elif feedback["concerns"]:
            note = feedback["concerns"][0]
        else:
            note = "-"
        if len(note) > 40:
            note = note[:37] + "..."
        lines.append(f"| {feedback['emoji']} {m} | {status} | {note} |")
    lines.append("")

    # 즉시 할 일
    action_items = result.get("action_items", [])
    if action_items:
        lines.append("### 즉시 할 일")
        lines.append("")
        lines.append("| # | 작업 | 담당 | 왜? |")
        lines.append("|---|------|------|-----|")
        for i, item in enumerate(action_items[:5], 1):
            lines.append(f"| {i} | {item['action']} | {item['emoji']} {item['manager']} | {item['verify']} |")
        lines.append("")

    # 보류/나중
    if len(action_items) > 5:
        lines.append("### 보류 (나중)")
        lines.append("")
        for item in action_items[5:8]:
            lines.append(f"- {item['action']} ({item['emoji']} {item['manager']})")
        lines.append("")

    # 주의 사항
    if result["warnings"]:
        lines.append("### 주의 사항")
        lines.append("")
        lines.append("```")
        for warning in result["warnings"]:
            lines.append(f"❌ NEVER: {warning.replace('⚠️ ', '').replace('보안 위험: ', '')}")
        lines.append("```")
        lines.append("")

    # 추천 사항
    if result["recommendations"]:
        lines.append("### 추천")
        lines.append("")
        for rec in result["recommendations"]:
            lines.append(f"- {rec}")
        lines.append("")

    lines.append("=" * 50)
    lines.append("")

    # 강화된 프롬프트
    lines.append(_get_ai_instruction_template())

    return "\n".join(lines)


def _generate_conversation(result: Dict) -> List[str]:
    """매니저들의 피드백을 대화 형식으로 변환합니다."""
    lines = []

    active_managers = result["active_managers"]
    feedbacks = result["feedback"]
    action_items = result.get("action_items", [])
    topics = result["context_analysis"].get("detected_topics", ["feature"])

    for i, m in enumerate(active_managers):
        feedback = feedbacks[m]
        emoji = feedback["emoji"]
        role = m

        if feedback.get("opinions"):
            opinion = feedback["opinions"][0]
            lines.append(f"**{emoji} {role}**: {opinion}")
            lines.append("")
        elif feedback["questions"]:
            q = feedback["questions"][0]
            lines.append(f"**{emoji} {role}**: {q}")
            lines.append("")

        if feedback["warnings"]:
            for w in feedback["warnings"]:
                lines.append(f"**{emoji} {role}**: 🚨 {w}")
                lines.append("")

        if feedback["concerns"]:
            c = feedback["concerns"][0]
            lines.append(f"**{emoji} {role}**: {c}")
            lines.append("")

    # PM 동적 마무리
    if "PM" in active_managers:
        summary_parts = []

        all_warnings = []
        for m in active_managers:
            all_warnings.extend(feedbacks[m].get("warnings", []))

        if all_warnings:
            summary_parts.append("보안 이슈 먼저 해결")

        if action_items:
            top_actions = [item["action"].split("(")[0].strip() for item in action_items[:2]]
            summary_parts.extend(top_actions)

        if "auth" in topics:
            summary_parts.append("인증 플로우 확정")
        elif "payment" in topics:
            summary_parts.append("결제 테스트 필수")
        elif "api" in topics:
            summary_parts.append("API 스펙 문서화")

        summary_parts = summary_parts[:3]

        if summary_parts:
            summary = ", ".join(summary_parts)
            lines.append(f"**👔 PM**: 정리하면 - 1) {summary}. 순서대로 진행하죠.")
        else:
            lines.append("**👔 PM**: 정리하면, 각자 체크리스트 확인 후 진행하겠습니다.")
        lines.append("")

    return lines


def _get_ai_instruction_template() -> str:
    """AI 재구성 지시 템플릿을 반환합니다."""
    return """
---

## 📝 AI 재구성 지시

위 데이터는 기계적으로 생성된 것입니다. 아래 형식으로 **자연스럽게 재구성**해주세요:

### 출력 형식

```
## 🏢 C-Level 회의록

---

**👔 PM**: [상황 설명 - 현재 뭐가 문제인지]

**🛠️ CTO**: [기술적 관점 의견 - PM 말에 반응]

**🧪 QA**: [품질 관점 - 테스트/검증 이슈]

**💰 CFO**: [비용/재무 관점]

**📢 CMO**: [마케팅 관점]

**🔒 CSO**: [보안 관점] (해당 시)

**🔥 Error**: [에러/리스크 관점] (해당 시)

**👔 PM**: [정리하며 마무리]

---

## 📋 최종 정리

### 현재 상태
| 항목 | 상태 | 비고 |
|------|------|------|
| ... | ✅/⚠️/🚨 | ... |

### 즉시 할 일 (이번 주)
| # | 작업 | 왜? |
|---|------|-----|
| 1 | ... | ... |

### 이번 달 할 일
| # | 작업 | 왜? |
|---|------|-----|

### 보류 (조건 충족 시)
| 작업 | 전환 조건 |
|------|-----------|

### 주의 사항
```
❌ NEVER: ...
✅ ALWAYS: ...
```
```

### 작성 규칙

1. **회의록은 대화체로**: 매니저들이 서로 의견 교환하는 것처럼
2. **구체적으로**: "테스트 필요" → "license.py의 activate_license_cli() 테스트 필요"
3. **컨텍스트 반영**: 위에서 감지된 토픽과 실제 상황을 연결
4. **인사이트 포함**: 단순 나열이 아닌 분석과 판단
5. **액션 가능하게**: 모호한 표현 금지, 구체적 다음 단계

### 톤앤매너

- 전문적이지만 대화체
- 이모지 과하지 않게
- 핵심만 간결하게
- 우선순위 명확히
"""
