import type { FastifyInstance } from 'fastify';
import {
  kpiHandler,
  monthlyOrdersHandler,
  monthlyProductionHandler,
  dispatchAnalysisHandler,
  recentOrdersHandler,
  ordersOverviewHandler,
  stageBreakdownHandler,
  stageNamesHandler,
  stageIdleSummaryHandler,
  clientNamesHandler,
  wireSizesByProductHandler,
} from '../controllers/dashboard.controller.js';
import { authorize } from '../plugins/authorize.js';
import { PERMISSIONS } from '../constants/permissions.js';

export default async function dashboardRoutes(fastify: FastifyInstance) {
  fastify.get('/api/dashboard/kpi', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, kpiHandler);
  fastify.get('/api/dashboard/monthly-orders', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, monthlyOrdersHandler);
  fastify.get('/api/dashboard/monthly-production', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, monthlyProductionHandler);
  fastify.get('/api/dashboard/dispatch-analysis', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, dispatchAnalysisHandler);
  fastify.get('/api/dashboard/recent-orders', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, recentOrdersHandler);
  fastify.get('/api/dashboard/orders-overview', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, ordersOverviewHandler);
  fastify.get('/api/dashboard/stage-breakdown', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, stageBreakdownHandler);
  fastify.get('/api/dashboard/stage-idle', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, stageIdleSummaryHandler);
  // Bare lookups for modals launched from the dashboard (Stage Breakdown/Idle,
  // Wire Size Club) that need a client name, stage name, or wire size but
  // shouldn't have to hold CLIENTS_VIEW/STAGES_VIEW/PRODUCTS_VIEW just to see
  // them — see dashboard.service.ts's stageNames()/clientNames().
  fastify.get('/api/dashboard/stage-names', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, stageNamesHandler);
  fastify.get('/api/dashboard/client-names', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, clientNamesHandler);
  fastify.get('/api/dashboard/wire-sizes-by-product', { preHandler: [authorize(PERMISSIONS.DASHBOARD_VIEW)] }, wireSizesByProductHandler);
}
