# backend/app/plugins/unit_split/store_router.py
from fastapi import APIRouter, Depends
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from app.api.deps import get_db, get_tenant_by_domain
from app.core.services.plugin_helper import require_plugin
from app.plugins.unit_split.models import ProductSellingUnit
from app.plugins.unit_split.schemas import SellingUnitOut


async def _require_unit_split(db: AsyncSession = Depends(get_db)) -> None:
    await require_plugin("unit_split", db)


store_router = APIRouter(tags=["unit_split_store"], dependencies=[Depends(_require_unit_split)])


@store_router.get("/store/products/{product_id}/selling-units", response_model=list[SellingUnitOut])
async def get_product_selling_units(
    product_id: int,
    db: AsyncSession = Depends(get_db),
    tid: int = Depends(get_tenant_by_domain),
):
    from app.core.models.product import Product
    prod_r = await db.execute(
        select(Product).where(Product.id == product_id, Product.tenant_id == tid)
    )
    product = prod_r.scalar_one_or_none()
    if product is None:
        return []

    r = await db.execute(
        select(ProductSellingUnit)
        .where(
            ProductSellingUnit.product_id == product_id,
            ProductSellingUnit.tenant_id == tid,
        )
        .order_by(ProductSellingUnit.sort_order)
    )
    units = r.scalars().all()
    result = []
    for u in units:
        out = SellingUnitOut.model_validate(u)
        out.base_price = float(product.base_price)
        result.append(out)
    return result
