# AI_CHANGELOG
# - 2026-03-20 | Prompt: M4 emoji 注释修复 | heart_emoji 注释从旧 3 级（❤️/💛/🤍）
#   改为 P6 权威定义的 4 级（💖/🧡/💛/💙），与 compute_heart_icon() 实际逻辑对齐。

from __future__ import annotations

from app.schemas.base import CamelModel


class PerformanceMetrics(CamelModel):
    """绩效概览 -- 与任务页 PerformanceSummary 统一数据源（monthly_summary 实时值）。"""
    # 核心绩效字段（来自 build_performance_summary，与任务页一致）
    total_hours: float = 0
    total_income: float = 0
    total_customers: int = 0
    month_label: str = ""
    tier_nodes: list[float] = []
    basic_hours: float = 0
    bonus_hours: float = 0
    current_tier: int = 0
    next_tier_hours: float = 0
    tier_completed: bool = False
    bonus_money: float = 0
    income_trend: str = ""
    income_trend_dir: str = "up"
    prev_month: str = ""
    current_tier_label: str = ""
    # 助教详情页专属扩展字段
    customer_balance: float = 0
    tasks_completed: int = 0
    # 兼容旧字段名（前端渐进适配）
    monthly_hours: float = 0
    monthly_salary: float = 0


class IncomeItem(CamelModel):
    label: str
    amount: str
    color: str


class IncomeSection(CamelModel):
    this_month: list[IncomeItem] = []
    last_month: list[IncomeItem] = []


class CoachTaskItem(CamelModel):
    type_label: str
    type_class: str
    customer_name: str
    customer_id: int | None = None
    note_count: int = 0
    pinned: bool = False
    notes: list[dict] | None = None


class AbandonedTask(CamelModel):
    customer_name: str
    reason: str


class TopCustomer(CamelModel):
    id: int
    name: str
    initial: str
    avatar_gradient: str
    # CHANGE 2026-03-20 | M4 修复: emoji 注释与 P6 权威定义对齐（4 级映射）
    # intent: 注释应反映 compute_heart_icon() 的实际 4 级映射（💖🧡💛💙）
    heart_emoji: str    # 💖 / 🧡 / 💛 / 💙
    score: str
    score_color: str
    service_count: int
    # CHANGE 2026-03-29 | str → float：后端返回原始数字，前端 WXS 格式化（避免 NaN）
    balance: float
    consume: float
    is_scattered: bool = False  # 散客标识，前端据此置灰名称


class CoachServiceRecord(CamelModel):
    customer_id: int | None = None
    customer_name: str
    initial: str
    avatar_gradient: str
    type: str
    type_class: str
    table: str | None = None
    duration: str
    # CHANGE 2026-03-29 | str → float：后端返回原始数字，前端 WXS 格式化（避免 NaN）
    income: float
    date: str
    perf_hours: str | None = None
    is_scattered: bool = False  # 散客标识，前端据此置灰名称


class HistoryMonth(CamelModel):
    month: str
    estimated: bool
    # CHANGE 2026-03-29 | str → int/float：后端返回原始数字，前端 WXS 格式化（避免 NaN）
    customers: int
    hours: float
    salary: float
    callback_done: int
    recall_done: int


class CoachNoteItem(CamelModel):
    id: int
    content: str
    timestamp: str
    score: int | None = None
    customer_name: str
    tag_label: str
    created_at: str


class CoachTaskStats(CamelModel):
    """当月任务完成统计（回访/召回分类）。"""
    callback: int = 0   # follow_up_visit 完成数
    recall: int = 0     # high_priority_recall + priority_recall 完成数


class CoachBannerResponse(CamelModel):
    """助教 banner 轻量响应（仅 name / level / store_name），用于 PERF-2 等只需 banner 的页面。"""
    id: int
    name: str
    level: str = ""
    store_name: str = ""


class CoachDetailResponse(CamelModel):
    """COACH-1 响应。"""
    # 基础信息
    id: int
    name: str
    avatar: str
    level: str
    # 门店名称：跟随被查看助教所在门店，供小程序 banner 展示
    store_name: str = ""
    skills: list[str] = []
    work_years: float = 0
    customer_count: int = 0
    hire_date: str | None = None
    # 绩效
    performance: PerformanceMetrics
    # 收入
    income: IncomeSection
    # 档位
    tier_nodes: list[float] = []
    # 当月任务完成统计
    task_stats: CoachTaskStats = CoachTaskStats()
    # 任务分组
    visible_tasks: list[CoachTaskItem] = []
    hidden_tasks: list[CoachTaskItem] = []
    abandoned_tasks: list[AbandonedTask] = []
    # TOP 客户
    top_customers: list[TopCustomer] = []
    # 近期服务记录
    service_records: list[CoachServiceRecord] = []
    # 历史月份
    history_months: list[HistoryMonth] = []
    # 备注
    notes: list[CoachNoteItem] = []
