from uuid import UUID

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

from src.apps.plots.schemas.plot_group import (
    CreatePlotGroupRequest,
    PlotGroupResponse,
)
from src.apps.plots.services.plot_group_service import PlotGroupService
from src.core.constants import UserRole
from src.core.dependencies import require_roles
from src.core.schemas.response import success
from src.database.session import get_db

router = APIRouter(prefix="/plot-groups", tags=["Plot Groups"])


@router.post("", response_model=dict, status_code=201)
async def create_plot_group(
    body: CreatePlotGroupRequest,
    current_user=Depends(require_roles(UserRole.ADMINISTRATOR, UserRole.MANAGER)),
    db: AsyncSession = Depends(get_db),
):
    """Merge 2+ adjacent plots into a couple/family/custom grave group (AC-20)."""
    service = PlotGroupService(db)
    group = await service.create(current_user.tenant_id, body.model_dump())
    return success(
        data=PlotGroupResponse(**group).model_dump(),
        message="Plots grouped",
    )


@router.delete("/{group_id}", status_code=204)
async def delete_plot_group(
    group_id: UUID,
    current_user=Depends(require_roles(UserRole.ADMINISTRATOR, UserRole.MANAGER)),
    db: AsyncSession = Depends(get_db),
):
    """Ungroup (delete the group; member plots are untouched)."""
    service = PlotGroupService(db)
    await service.delete(group_id, current_user.tenant_id)
