# app/modules/chassis_tracker/routes.py
from fastapi import APIRouter, Depends, Query, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List, Optional

from app.core.database import get_db
from app.core.security import require_permission, require_permission_any
from app.models.core_models import LoginUsers
from .service import ChassisTrackerService
from .schemas import ChassisSearchResult, ChassisLifecycleResponse, ChassisOrderSpecOut
from .order_spec_service import get_chassis_order_spec_by_identifier

router = APIRouter()


@router.get('/search', response_model=List[ChassisSearchResult])
async def search_chassis(
    q: Optional[str] = Query(None, description="Search term for chassis number, model, or dealer"),
    limit: int = Query(25, ge=1, le=100),
    db: AsyncSession = Depends(get_db),
    user: LoginUsers = Depends(require_permission('CHASSIS_TRACKER', 'view')),
):
    """
    Search and autocomplete chassis by number, model name, or customer name.
    Guarded by CHASSIS_TRACKER view permission in the permission matrix.
    """
    service = ChassisTrackerService(db)
    return await service.search_chassis(q or '', limit=limit)


@router.get('/{chassis_identifier}/order-spec', response_model=ChassisOrderSpecOut)
async def get_chassis_order_spec(
    chassis_identifier: str,
    db: AsyncSession = Depends(get_db),
    user: LoginUsers = Depends(require_permission_any(['CHASSIS_TRACKER', 'SALES', 'PRODUCTION', 'QA', 'YARD'], 'view')),
):
    """
    Fetch complete manufacturing order details, build specifications, and special features for a chassis.
    Available to users with CHASSIS_TRACKER, Sales, Production, QA, or Yard view permission.
    """
    return await get_chassis_order_spec_by_identifier(db, chassis_identifier)


@router.get('/{chassis_identifier}/lifecycle', response_model=ChassisLifecycleResponse)
async def get_chassis_lifecycle(
    chassis_identifier: str,
    db: AsyncSession = Depends(get_db),
    user: LoginUsers = Depends(require_permission('CHASSIS_TRACKER', 'view')),
):
    """
    Fetch comprehensive end-to-end lifecycle history, visual timeline milestones,
    and auto-generated client update messages (WhatsApp/Email) for a given chassis.
    Guarded by CHASSIS_TRACKER view permission in the permission matrix.
    """
    service = ChassisTrackerService(db)
    return await service.get_chassis_lifecycle(chassis_identifier)
