from __future__ import annotations

from typing import Any

from fastapi import APIRouter, Depends, HTTPException

from app.modules.auth.presentation.auth import get_current_user, require_role
from app.modules.operations.application.ai_site_diary_service import AISiteDiaryService
from app.modules.operations.application.equipment_efficiency_service import EquipmentEfficiencyService

from .models import FuelLogCreateRequest

router = APIRouter()


@router.get("/early-warning-radar")
def get_early_warning_radar(
    current_user: dict[str, Any] = Depends(
        require_role(["superadmin", "director", "pm", "site_engineer", "accountant"])
    ),
) -> list[dict[str, Any]]:
    """Quét và phân tích cảnh báo sớm rủi ro chi phí & tiến độ toàn hệ thống."""
    service = AISiteDiaryService()
    return service.run_early_warning_radar()


@router.get("/equipment/{equipment_id}/fuel-efficiency")
def get_equipment_fuel_efficiency(
    equipment_id: str,
    current_user: dict[str, Any] = Depends(get_current_user),
) -> dict[str, Any]:
    """Lấy dữ liệu hiệu suất sử dụng xăng dầu của thiết bị máy móc ca máy."""
    service = EquipmentEfficiencyService()
    res = service.get_equipment_efficiency(equipment_id)
    if "error" in res:
        raise HTTPException(status_code=404, detail=res["error"])
    return res


@router.post("/equipment/fuel-logs")
def create_equipment_fuel_log(
    payload: FuelLogCreateRequest,
    current_user: dict[str, Any] = Depends(
        require_role(["superadmin", "director", "pm", "mechanic", "site_engineer"])
    ),
) -> dict[str, Any]:
    """Ghi nhận đợt đổ nhiên liệu cho ca máy."""
    service = EquipmentEfficiencyService()
    res = service.record_fuel_log(
        equipment_id=payload.equipment_id,
        fill_date=payload.fill_date,
        fuel_quantity_liters=payload.fuel_quantity_liters,
        unit_price_vnd=payload.unit_price_vnd,
        total_cost_vnd=payload.total_cost_vnd,
        odometer_hours=payload.odometer_hours,
        source_invoice_id=payload.source_invoice_id,
    )
    if res.get("status") == "error":
        raise HTTPException(status_code=400, detail=res["message"])
    return res


@router.get("/equipment/fleet-summary")
def get_fleet_fuel_summary(
    current_user: dict[str, Any] = Depends(
        require_role(["superadmin", "director", "pm", "mechanic", "accountant"])
    ),
) -> dict[str, Any]:
    """Báo cáo tổng hợp đoàn xe tải ben & máy đào, phân tích tiêu hao dầu DO và cảnh báo thất thoát."""
    service = EquipmentEfficiencyService()
    return service.get_fleet_fuel_summary()
