# app/modules/hosting/routes/api/admin_services.py
"""
Admin API routes for client service management.
"""

import logging

from fastapi import APIRouter, Depends, Path
from sqlalchemy.orm import Session

from app.api.deps import get_current_admin_api
from app.core.database import get_db
from app.modules.hosting.schemas.client_service import (
    ClientServiceCreate,
    ClientServiceDeleteResponse,
    ClientServiceResponse,
    ClientServiceUpdate,
)
from app.modules.hosting.services.client_service_service import client_service_service
from app.modules.tenancy.schemas.auth import UserContext

router = APIRouter(prefix="/sites/{site_id}/services")
logger = logging.getLogger(__name__)


@router.get("", response_model=list[ClientServiceResponse])
def list_services(
    site_id: int = Path(...),
    db: Session = Depends(get_db),
    current_admin: UserContext = Depends(get_current_admin_api),
):
    """List services for a hosted site."""
    return client_service_service.get_for_site(db, site_id)


@router.post("", response_model=ClientServiceResponse)
def create_service(
    data: ClientServiceCreate,
    site_id: int = Path(...),
    db: Session = Depends(get_db),
    current_admin: UserContext = Depends(get_current_admin_api),
):
    """Create a new service for a hosted site."""
    service = client_service_service.create(db, site_id, data.model_dump(exclude_none=True))
    db.commit()
    return service


@router.put("/{service_id}", response_model=ClientServiceResponse)
def update_service(
    data: ClientServiceUpdate,
    site_id: int = Path(...),
    service_id: int = Path(...),
    db: Session = Depends(get_db),
    current_admin: UserContext = Depends(get_current_admin_api),
):
    """Update a client service."""
    service = client_service_service.update(db, service_id, data.model_dump(exclude_none=True))
    db.commit()
    return service


@router.delete("/{service_id}", response_model=ClientServiceDeleteResponse)
def delete_service(
    site_id: int = Path(...),
    service_id: int = Path(...),
    db: Session = Depends(get_db),
    current_admin: UserContext = Depends(get_current_admin_api),
):
    """Delete a client service."""
    client_service_service.delete(db, service_id)
    db.commit()
    return ClientServiceDeleteResponse(message="Service deleted")
