from uuid import UUID
from fastapi import APIRouter,Depends,HTTPException,status
from sqlalchemy.orm import Session
from app.api.workspace import get_verified_current_user
from app.db.session import get_db
from app.models.customer import Customer
from app.models.user import User
from app.schemas.customer import CustomerCreate,CustomerUpdate
from app.services.customers import list_customers
from app.services.workspace import get_membership_for_business
router=APIRouter(tags=["Customers"])
def access(db,user,business):
    if not get_membership_for_business(db,user,business):raise HTTPException(404,"Business workspace not found.")
@router.post("/api/businesses/{business_id}/customers",status_code=201)
def create(business_id:UUID,data:CustomerCreate,user:User=Depends(get_verified_current_user),db:Session=Depends(get_db)):
    access(db,user,business_id);obj=Customer(business_id=business_id,**data.model_dump());db.add(obj);db.commit();db.refresh(obj);return obj
@router.get("/api/businesses/{business_id}/customers")
def listing(business_id:UUID,q:str|None=None,user:User=Depends(get_verified_current_user),db:Session=Depends(get_db)):
    access(db,user,business_id);return list_customers(db,business_id,q)
@router.get("/api/businesses/{business_id}/customers/{customer_id}")
def detail(business_id:UUID,customer_id:UUID,user:User=Depends(get_verified_current_user),db:Session=Depends(get_db)):
    access(db,user,business_id);obj=db.get(Customer,customer_id)
    if not obj or obj.business_id!=business_id:raise HTTPException(404,"Customer not found.")
    return obj
@router.patch("/api/businesses/{business_id}/customers/{customer_id}")
def update(business_id:UUID,customer_id:UUID,data:CustomerUpdate,user:User=Depends(get_verified_current_user),db:Session=Depends(get_db)):
    obj=detail(business_id,customer_id,user,db)
    for k,v in data.model_dump(exclude_unset=True).items():setattr(obj,k,v)
    db.commit();db.refresh(obj);return obj
