import { getAuthHeaders } from "./api-client";
import {
  FinancialReportResponse,
  FleetReportResponse,
  MaintenanceReportResponse,
  ReportFilterParams,
  ReportSummaryStats,
} from "@/types/reports";

const API_BASE = (process.env.NEXT_PUBLIC_API_URL || "http://localhost:3333").replace(/\/$/, "") + "/api";

export async function getReportSummary(params: ReportFilterParams): Promise<ReportSummaryStats> {
  try {
    const query = new URLSearchParams();
    if (params.startDate) query.set("startDate", params.startDate);
    if (params.endDate) query.set("endDate", params.endDate);

    const res = await fetch(`${API_BASE}/reports/summary?${query.toString()}`, {
      headers: getAuthHeaders(),
      cache: "no-store",
    });

    if (res.ok) {
      return await res.json();
    }
  } catch {
    // fallback
  }

  return {
    totalRevenue: 0,
    totalMaintenanceCost: 0,
    netProfit: 0,
    activeRentalsCount: 0,
    totalEquipmentCount: 0,
    rentedEquipmentCount: 0,
    fleetUtilizationRate: 0,
  };
}

export async function getFinancialReport(params: ReportFilterParams): Promise<FinancialReportResponse> {
  try {
    const query = new URLSearchParams();
    if (params.startDate) query.set("startDate", params.startDate);
    if (params.endDate) query.set("endDate", params.endDate);
    if (params.search) query.set("search", params.search);

    const res = await fetch(`${API_BASE}/reports/financial?${query.toString()}`, {
      headers: getAuthHeaders(),
      cache: "no-store",
    });

    if (res.ok) {
      const data = await res.json();
      if (data && Array.isArray(data.items)) {
        return data;
      }
    }
  } catch {
    // fallback
  }

  return {
    items: [],
    summary: {
      totalReceivables: 0,
      totalPayables: 0,
      balance: 0,
    },
  };
}

export async function getFleetReport(params: ReportFilterParams): Promise<FleetReportResponse> {
  try {
    const query = new URLSearchParams();
    if (params.startDate) query.set("startDate", params.startDate);
    if (params.endDate) query.set("endDate", params.endDate);
    if (params.categoryId) query.set("categoryId", params.categoryId);
    if (params.search) query.set("search", params.search);

    const res = await fetch(`${API_BASE}/reports/fleet?${query.toString()}`, {
      headers: getAuthHeaders(),
      cache: "no-store",
    });

    if (res.ok) {
      const data = await res.json();
      if (data && Array.isArray(data.items)) {
        return data;
      }
    }
  } catch {
    // fallback
  }

  return { items: [] };
}

export async function getMaintenanceReport(params: ReportFilterParams): Promise<MaintenanceReportResponse> {
  try {
    const query = new URLSearchParams();
    if (params.startDate) query.set("startDate", params.startDate);
    if (params.endDate) query.set("endDate", params.endDate);
    if (params.status) query.set("status", params.status);
    if (params.search) query.set("search", params.search);

    const res = await fetch(`${API_BASE}/reports/maintenance?${query.toString()}`, {
      headers: getAuthHeaders(),
      cache: "no-store",
    });

    if (res.ok) {
      const data = await res.json();
      if (data && Array.isArray(data.items)) {
        return data;
      }
    }
  } catch {
    // fallback
  }

  return {
    items: [],
    summary: {
      totalOrders: 0,
      totalCost: 0,
    },
  };
}
