import express, { Router } from 'express';
import * as channelPartnerController from './channelPartner.controller';
import * as channelPartnerValidation from './channelPartner.validation';
import { validateMiddleware } from '@/shared/utils/middlewares/index';
import userAuthAndCheckPermissions from '../auth/auth.user.middleware';
import { setAuditFields } from '@/shared/middleware/setAuditFields';
import { AuditMode } from '@/shared/constants/enum.constant';

const router: Router = express.Router();

// ===================== CP Company Routes =====================

router
  .route('/company')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.getCPCompanies),
    channelPartnerController.getCPCompanies,
  )
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.createCPCompany),
    setAuditFields({ mode: AuditMode.CREATE, companyField: 'company' }),
    channelPartnerController.createCPCompany,
  );

router
  .route('/company/bulk-status')
  .patch(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.bulkUpdateStatus),
    channelPartnerController.bulkUpdateCPCompanyStatus,
  );

router
  .route('/company/bulk-delete')
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.bulkDelete),
    channelPartnerController.bulkDeleteCPCompanies,
  );

router
  .route('/company/:id')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.getCPCompanyById),
    channelPartnerController.getCPCompanyById,
  )
  .patch(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.updateCPCompany),
    setAuditFields({ mode: AuditMode.UPDATE }),
    channelPartnerController.updateCPCompany,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.deleteCPCompany),
    channelPartnerController.deleteCPCompany,
  );

// ===================== CP Contact Routes =====================

router
  .route('/contact')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.getCPContacts),
    channelPartnerController.getCPContacts,
  )
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.createCPContact),
    setAuditFields({ mode: AuditMode.CREATE, companyField: 'company' }),
    channelPartnerController.createCPContact,
  );

router
  .route('/contact/:id')
  .patch(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.updateCPContact),
    setAuditFields({ mode: AuditMode.UPDATE }),
    channelPartnerController.updateCPContact,
  )
  .delete(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.deleteCPContact),
    channelPartnerController.deleteCPContact,
  );

// ===================== CP Sales Routes =====================

router
  .route('/sales')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.getCPSales),
    channelPartnerController.getCPSales,
  );

// ===================== CP Payment Routes =====================

router
  .route('/payment')
  .get(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.getPayments),
    channelPartnerController.getPayments,
  )
  .post(
    userAuthAndCheckPermissions(),
    validateMiddleware(channelPartnerValidation.recordPayment),
    setAuditFields({ mode: AuditMode.CREATE, companyField: 'company' }),
    channelPartnerController.recordPayment,
  );

export default router;
