from fastapi import APIRouter, Depends, UploadFile, File
from sqlalchemy.orm import Session
from src.core.database import get_db
from src.apps.auth.utils.auth import get_current_merchant, get_current_user
from src.apps.settings import services
from src.apps.settings.schemas.branding import BrandingUpdateRequest, LogoUploadResponse

router = APIRouter()


@router.get("")
async def get_branding(
    current_merchant=Depends(get_current_merchant),
    db: Session = Depends(get_db),
):
    return services.get_branding_settings(current_merchant.id, db)


@router.put("")
async def update_branding(
    data: BrandingUpdateRequest,
    current_merchant=Depends(get_current_merchant),
    db: Session = Depends(get_db),
):
    result = services.update_branding_settings(
        data.model_dump(exclude_none=True), current_merchant.id, db
    )
    db.commit()
    return result


@router.post("/logo", response_model=LogoUploadResponse)
async def upload_logo(
    file: UploadFile = File(...),
    current_merchant=Depends(get_current_merchant),
    current_user=Depends(get_current_user),
    db: Session = Depends(get_db),
):
    logo_url = await services.upload_logo(
        current_merchant.id, current_user.id, file, db
    )
    db.commit()
    return LogoUploadResponse(logo_url=logo_url)
