"""
시스템 정보 API (모바일 기능 #77).

  GET /api/system/release-notes  — 버전별 릴리즈 노트 목록
  GET /api/system/version        — 현재 버전 정보

릴리즈 노트는 정적 정의(코드 내장)로 제공한다.
"""
from __future__ import annotations

from typing import List, Optional

from fastapi import APIRouter, Depends
from pydantic import BaseModel

from core.auth import get_current_user
from models import User

router = APIRouter(prefix="/api/system", tags=["System"])

CURRENT_VERSION = "2.0.0"

# 최신 → 과거 순서
_RELEASE_NOTES: List[dict] = [
    {
        "version": "2.0.0",
        "date": "2026-06-06",
        "changes": [
            "모바일 100기능 백엔드 API 추가 (알림규칙·통합검색·SR채팅·부품재고)",
            "SR 에스컬레이션/구독/만족도/현장서명/체크인 지원",
            "보안 이벤트 로그 및 디바이스 관리 추가",
            "다단계 승인 현황 및 변경 달력 API 추가",
        ],
        "breaking_changes": [],
    },
    {
        "version": "1.5.0",
        "date": "2026-06-01",
        "changes": [
            "CI/CD 배포 트리거 연동",
            "tmux 세션 관리·하네스 빌더 추가",
            "AI-SOC·데이터 거버넌스 영역 확장",
        ],
        "breaking_changes": [],
    },
    {
        "version": "1.0.0",
        "date": "2026-05-20",
        "changes": [
            "GUARDiA ITSM 정식 출시",
            "SR 라이프사이클·CMDB·KB·SLA·승인 워크플로우",
        ],
        "breaking_changes": [],
    },
]


class ReleaseNote(BaseModel):
    version: str
    date: str
    changes: List[str]
    breaking_changes: List[str] = []


@router.get("/release-notes", response_model=List[ReleaseNote])
async def list_release_notes(
    since: Optional[str] = None,
    _u: User = Depends(get_current_user),
):
    """버전별 릴리즈 노트 목록 (최신순). since 지정 시 해당 버전 이후만."""
    notes = _RELEASE_NOTES
    if since:
        # since 버전 이후(미포함)만 반환
        filtered = []
        for n in notes:
            if n["version"] == since:
                break
            filtered.append(n)
        notes = filtered
    return notes


@router.get("/version")
async def get_version(_u: User = Depends(get_current_user)):
    """현재 버전 정보."""
    latest = _RELEASE_NOTES[0] if _RELEASE_NOTES else None
    return {
        "name": "GUARDiA ITSM",
        "version": CURRENT_VERSION,
        "latest_release_date": latest["date"] if latest else None,
        "release_count": len(_RELEASE_NOTES),
    }
