import { Router } from 'express';
import userRoutes from './user.routes.js';
import authRoutes from './auth.routes.js';
import roleRoutes from './role.routes.js';
import permissionRoutes from './permission.routes.js';
import unitRoutes from './unit.routes.js';
import costCodeRoutes from './costCode.routes.js';
import materialRoutes from './material.routes.js';
import equipmentRoutes from './equipment.routes.js';
import labourRoutes from './labour.routes.js';
import organizationRoutes from './organization.routes.js';
import contractorRoutes from './contractor.routes.js';
import vendorRoutes from './vendor.routes.js';
import projectRoutes from './project.routes.js';
import wbsRoutes from './wbs.routes.js';
import planRoutes from './plan.routes.js';
import moduleRoutes from './module.routes.js';
import settingsRoutes from './settings.routes.js';
import auditLogRoutes from './auditLog.routes.js';
import inviteRoutes from './invite.routes.js';
import uploadRoutes from './upload.routes.js';
import organizationInviteRoutes from './organizationInvite.routes.js';
import dashboardRoutes from './dashboard.routes.js';
import tenantAdminRoutes from './tenantAdmin.routes.js';
import workspaceRoutes from './workspace.routes.js';
import { getHealth } from '../controllers/health.controller.js';

const router = Router();

router.get('/health', getHealth);
router.use('/users', userRoutes);
router.use('/auth', authRoutes);
router.use('/roles', roleRoutes);
router.use('/permissions', permissionRoutes);
router.use('/units', unitRoutes);
router.use('/cost-codes', costCodeRoutes);
router.use('/materials', materialRoutes);
router.use('/equipment', equipmentRoutes);
router.use('/labours', labourRoutes);
router.use('/organizations', organizationRoutes);
router.use('/contractors', contractorRoutes);
router.use('/vendors', vendorRoutes);
router.use('/projects', projectRoutes);
router.use('/wbs', wbsRoutes);
router.use('/plans', planRoutes);
router.use('/modules', moduleRoutes);
router.use('/settings', settingsRoutes);
router.use('/audit-logs', auditLogRoutes);
router.use('/dashboard', dashboardRoutes);
// Image uploads to S3 (logos and photos also have their own endpoints).
router.use('/uploads', uploadRoutes);
// The tenant app's Administration module, scoped to the caller's organization.
router.use('/admin', tenantAdminRoutes);
// Public invite links (no sign-in): a tenant inviting its own employees.
router.use('/invites', inviteRoutes);
// Public: the Super Admin onboarding wizard's single Tenant Admin invite.
router.use('/organization-invites', organizationInviteRoutes);
// Projects (scoped to the caller) and access requests.
router.use('/', workspaceRoutes);

export default router;
