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

from app.api.deps import get_db, get_tenant_by_domain
from app.core.models.product import Product
from app.core.services.plugin_helper import require_plugin
from app.plugins.product_media_roles.schemas import StoreProductMediaRoleItemOut
from app.plugins.product_media_roles.services import list_store_product_media_roles


async def _require_plugin(db: AsyncSession = Depends(get_db)) -> None:
    await require_plugin("product_media_roles", db)


store_router = APIRouter(tags=["product_media_roles_store"], dependencies=[Depends(_require_plugin)])


@store_router.get("/store/products/{product_id}/media-roles", response_model=dict[str, list[StoreProductMediaRoleItemOut]])
async def list_store_media_roles(
    product_id: int,
    db: AsyncSession = Depends(get_db),
    tenant_id: int = Depends(get_tenant_by_domain),
):
    product_result = await db.execute(select(Product.id).where(Product.id == product_id, Product.tenant_id == tenant_id))
    if product_result.scalar_one_or_none() is None:
        raise HTTPException(status_code=404, detail="Product not found")
    return await list_store_product_media_roles(db, tenant_id, product_id)
