"""
V5.0 AI 画像强约束 Pydantic Schema
- CompanyPersona: 企业级画像 (crm_customers.ai_persona)
- BuyerPersona:   联系人级画像 (crm_contacts.ai_buyer_persona)
"""
from __future__ import annotations

from pydantic import BaseModel, Field


# ═══════════════════════════════════════════════════════
# 企业画像 (crm_customers.ai_persona)
# ═══════════════════════════════════════════════════════

class Firmographics(BaseModel):
    """企业属性"""
    industry: str | None = None
    scale: str | None = None
    business_model: str | None = None


class DynamicStatus(BaseModel):
    """时序动态"""
    pain_points: list[str] = Field(default_factory=list)
    purchase_intent: str | None = None
    recent_events: list[str] = Field(default_factory=list)


class CompanyPersona(BaseModel):
    """企业级 AI 画像 Schema"""
    firmographics: Firmographics = Field(default_factory=Firmographics)
    dynamic_status: DynamicStatus = Field(default_factory=DynamicStatus)
    summary: str | None = None


# ═══════════════════════════════════════════════════════
# 联系人画像 (crm_contacts.ai_buyer_persona)
# ═══════════════════════════════════════════════════════

class BuyerRole(BaseModel):
    """决策角色"""
    decision_role: str | None = None       # 决策者 / 影响者 / 执行者
    authority_level: str | None = None     # 高 / 中 / 低


class BuyerKPI(BaseModel):
    """核心痛点与目标"""
    core_goals: list[str] = Field(default_factory=list)
    pain_points: list[str] = Field(default_factory=list)


class BuyerPreference(BaseModel):
    """交互偏好"""
    comm_style: str | None = None
    meeting_preference: str | None = None
    topics_of_interest: list[str] = Field(default_factory=list)


class BuyerPersona(BaseModel):
    """联系人级 AI 画像 Schema"""
    role: BuyerRole = Field(default_factory=BuyerRole)
    kpi: BuyerKPI = Field(default_factory=BuyerKPI)
    preference: BuyerPreference = Field(default_factory=BuyerPreference)


# ═══════════════════════════════════════════════════════
# 双轨画像回写 Payload（Dify Workflow 回调用）
# ═══════════════════════════════════════════════════════

class ContactPersonaUpdate(BaseModel):
    """单个联系人画像增量"""
    contact_id: str
    role: dict | None = None
    kpi: dict | None = None
    preference: dict | None = None


class PersonaUpdatePayload(BaseModel):
    """双轨画像回写请求体"""
    company_updates: dict | None = None
    contact_updates: list[ContactPersonaUpdate] | None = None
