from __future__ import annotations

from datetime import datetime
from typing import List, Optional

from fastapi import APIRouter, Query
from pydantic import BaseModel

from app.db import get_pool

router = APIRouter(tags=["logs"])


class AccessLogOut(BaseModel):
    id: int
    ip: str
    method: str
    path: str
    status_code: int
    latency_ms: float
    country: str
    city: str
    latitude: Optional[float]
    longitude: Optional[float]
    created_at: datetime


@router.get("/logs", response_model=List[AccessLogOut])
async def get_logs(
    page: int = Query(default=1, ge=1),
    page_size: int = Query(default=50, ge=1, le=500),
) -> List[AccessLogOut]:
    offset = (page - 1) * page_size
    pool = get_pool()
    async with pool.acquire() as conn:
        rows = await conn.fetch(
            "SELECT * FROM access_logs ORDER BY created_at DESC LIMIT $1 OFFSET $2",
            page_size,
            offset,
        )
    return [AccessLogOut(**dict(row)) for row in rows]
