from fastapi import APIRouter, HTTPException, Depends
from model.product import ProductPayload, ProductDatabaseModel
from MongoDBConnection import MONGO_URI, DB_NAME
from utils.auth_helper import requires_permission, assert_actor_match
from utils.turnstile_helper import verify_turnstile

router = APIRouter()


class ProductAdminPayload(ProductPayload):
    actorId: str


db_model = ProductDatabaseModel(
    db_uri=MONGO_URI,
    db_name=DB_NAME,
    collection_name="products"
)


@router.post("/add-product", dependencies=[Depends(verify_turnstile)])
async def add_product(
    product: ProductAdminPayload,
    current_user=Depends(requires_permission("product_management"))
):
    try:
        actor_id = current_user["id"]
        actor_name = current_user.get("name", "")
        assert_actor_match(current_user, product.actorId)

        raw_data = product.model_dump(exclude={"actorId"})

        inserted_id = db_model.insert_product(raw_data)

        return {
            "status": "success",
            "message": "Đã thêm sản phẩm thành công!",
            "data": {
                "product_id": inserted_id
            },
            "actedBy": {
                "id": actor_id,
                "name": actor_name
            }
        }
    except ValueError as ve:
        raise HTTPException(status_code=400, detail=str(ve))
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))