"""방문자 집계 — 페이지 접속 기록(일별 순수 방문자)."""
from __future__ import annotations

from fastapi import APIRouter, Depends
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession

from ..database import get_db
from ..domain import KST, now_utc
from ..models import PageVisit
from ..schemas import VisitIn, VisitOut

router = APIRouter(prefix="/api/visit", tags=["visits"])


@router.post("", response_model=VisitOut)
async def record_visit(body: VisitIn, db: AsyncSession = Depends(get_db)) -> VisitOut:
    """페이지 접속 기록. 같은 기기가 같은 날(KST) 재접속하면 집계하지 않는다."""
    today = now_utc().astimezone(KST).date()
    db.add(PageVisit(visit_date=today, device_id=body.deviceId))
    try:
        await db.commit()
        return VisitOut(ok=True, counted=True)  # 오늘 첫 방문 → 집계
    except IntegrityError:
        await db.rollback()
        return VisitOut(ok=True, counted=False)  # 재방문 → 무시
