"""Ziyaretçi tanıma + profil + KVKK request/response şemaları."""
from datetime import datetime
from decimal import Decimal

from pydantic import BaseModel, ConfigDict, EmailStr, Field


class IdentifyRequest(BaseModel):
    visitor_uuid: str | None = Field(default=None, max_length=64)
    fingerprint_hash: str | None = Field(default=None, max_length=64)
    fingerprint_signals: dict | None = None  # ham sinyaller → server hash'ler
    page_url: str | None = Field(default=None, max_length=1000)
    referrer: str | None = Field(default=None, max_length=500)
    device_type: str | None = None
    browser: str | None = Field(default=None, max_length=50)
    language: str | None = Field(default=None, max_length=10)
    utm_source: str | None = Field(default=None, max_length=100)
    utm_medium: str | None = Field(default=None, max_length=100)
    utm_campaign: str | None = Field(default=None, max_length=100)


class IdentifyResponse(BaseModel):
    visitor_id: str
    visitor_uuid: str
    is_returning: bool


class MergeIdentityRequest(BaseModel):
    """Email/telefon/ad geldiğinde (lead/checkout) — KVKK onayı zorunlu."""

    email: EmailStr | None = None
    phone: str | None = Field(default=None, max_length=30)
    name: str | None = Field(default=None, max_length=200)
    kvkk_consent: bool = False


class VisitorProfileResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: str
    visitor_uuid: str
    email: str | None
    phone: str | None
    name: str | None
    device_type: str | None
    browser: str | None
    language: str | None
    total_sessions: int
    total_messages: int
    last_intent: str | None
    lifetime_value: Decimal
    products_viewed: list | None
    products_purchased: list | None
    cart_abandoned: dict | None
    interests: list | None
    is_returning: bool
    kvkk_consent_at: datetime | None
    anonymized_at: datetime | None
    created_at: datetime
