from fastapi import APIRouter, BackgroundTasks, Depends, Query, status
from sqlalchemy.orm import Session

from .. import crud, schemas, security
from ..database import get_db
from ..email_service import send_contact_emails

router = APIRouter(prefix="/api/yatra/contact", tags=["contact"])


@router.post("", response_model=schemas.ContactOut, status_code=status.HTTP_201_CREATED)
def create_contact(
    payload: schemas.ContactCreate,
    background_tasks: BackgroundTasks,
    db: Session = Depends(get_db),
) -> schemas.ContactOut:
    contact = crud.create_contact_message(db, payload)
    background_tasks.add_task(
        send_contact_emails,
        name=payload.name,
        email=payload.email,
        phone=payload.phone,
        message=payload.message,
    )
    return contact


@router.get(
    "",
    response_model=list[schemas.ContactOut],
    dependencies=[Depends(security.require_roles(*security.VIEW_ROLES))],
)
def list_contacts(
    skip: int = Query(0, ge=0),
    limit: int = Query(100, ge=1, le=500),
    db: Session = Depends(get_db),
) -> list[schemas.ContactOut]:
    return crud.list_contact_messages(db, skip=skip, limit=limit)
