import { Router } from 'express';
import { requireApproverAuth } from '../middleware/auth';
import {
  approverMe,
  approverPending,
  approverHistory,
  approverApproveVisitor,
  approverRejectVisitor,
  approverCreateVisitor,
  approverListVisitors,
  approverGetVisitorByShortId,
  approverCounts,
  approverListWalkInRequests,
  approverApproveWalkIn,
  approverRejectWalkIn,
} from '../controllers/approver.controller';
import { approverNotifications } from '../controllers/notifications.controller';
import { listVisitorReasonsForApprover } from '../controllers/visitorReasons.controller';
import { registerDevice, unregisterDevice } from '../controllers/devices.controller';
import { deleteOwnAccount } from '../controllers/account.controller';

const router = Router();

router.get('/reasons', requireApproverAuth, listVisitorReasonsForApprover);

// Login is now handled by /api/auth/verify-otp which returns role=APPROVER for approver emails
router.get('/me', requireApproverAuth, approverMe);
router.get('/pending', requireApproverAuth, approverPending);
router.get('/history', requireApproverAuth, approverHistory);
router.get('/visitors', requireApproverAuth, approverListVisitors);
router.get('/visitors/by-short-id/:shortId', requireApproverAuth, approverGetVisitorByShortId);
router.get('/counts', requireApproverAuth, approverCounts);
router.post('/visitors', requireApproverAuth, approverCreateVisitor);
router.post('/visitors/:id/approve', requireApproverAuth, approverApproveVisitor);
router.post('/visitors/:id/reject', requireApproverAuth, approverRejectVisitor);
router.get('/requests', requireApproverAuth, approverListWalkInRequests);
router.post('/requests/:id/approve', requireApproverAuth, approverApproveWalkIn);
router.post('/requests/:id/reject', requireApproverAuth, approverRejectWalkIn);

// Device push tokens — mobile app registers on launch (legacy approver path).
router.post('/devices/register', requireApproverAuth, registerDevice);
router.post('/devices/unregister', requireApproverAuth, unregisterDevice);

// Apple App Store requires an in-app account-deletion path.
router.delete('/account', requireApproverAuth, deleteOwnAccount);

router.get('/notifications', requireApproverAuth, approverNotifications.list);
router.post('/notifications/read-all', requireApproverAuth, approverNotifications.markAllRead);
router.post('/notifications/:id/read', requireApproverAuth, approverNotifications.markRead);

export default router;
