import { Router } from 'express';
import * as contractTaskController from '../controllers/contractTask.controller.js';
import { authenticate, requirePermission } from '../middleware/auth.js';

const router = Router();

// ==================== ALL TASKS (vertragsübergreifend) ====================

// Alle Aufgaben über alle Verträge (für Dashboard & Task-Liste)
router.get(
  '/tasks',
  authenticate,
  requirePermission('contracts:read'),
  contractTaskController.getAllTasks
);

// Task-Statistik (offene Aufgaben)
router.get(
  '/tasks/stats',
  authenticate,
  requirePermission('contracts:read'),
  contractTaskController.getTaskStats
);

// Allgemeine Aufgabe OHNE Vertrag/Kunde anlegen (nur Mitarbeiter)
router.post(
  '/tasks',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.createGeneralTask
);

// ==================== TASKS BY CONTRACT ====================

// Alle Aufgaben eines Vertrags abrufen (auch für Kundenportal, aber nur sichtbare)
router.get(
  '/contracts/:contractId/tasks',
  authenticate,
  requirePermission('contracts:read'),
  contractTaskController.getTasks
);

// Neue Aufgabe erstellen (nur für Mitarbeiter mit contracts:update)
router.post(
  '/contracts/:contractId/tasks',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.createTask
);

// Support-Anfrage erstellen (für Kundenportal-Benutzer, nur contracts:read erforderlich)
router.post(
  '/contracts/:contractId/support-ticket',
  authenticate,
  requirePermission('contracts:read'),
  contractTaskController.createSupportTicket
);

// Aufgabe aktualisieren
router.put(
  '/tasks/:taskId',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.updateTask
);

// Aufgabe als erledigt markieren
router.post(
  '/tasks/:taskId/complete',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.completeTask
);

// Aufgabe wieder öffnen
router.post(
  '/tasks/:taskId/reopen',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.reopenTask
);

// Aufgabe löschen
router.delete(
  '/tasks/:taskId',
  authenticate,
  requirePermission('contracts:delete'),
  contractTaskController.deleteTask
);

// ==================== SUBTASKS ====================

// Neue Unteraufgabe erstellen (Mitarbeiter)
router.post(
  '/tasks/:taskId/subtasks',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.createSubtask
);

// Antwort auf eigenes Ticket erstellen (Kundenportal)
router.post(
  '/tasks/:taskId/reply',
  authenticate,
  requirePermission('contracts:read'),
  contractTaskController.createCustomerReply
);

// Unteraufgabe als erledigt markieren
router.post(
  '/subtasks/:subtaskId/complete',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.completeSubtask
);

// Unteraufgabe wieder öffnen
router.post(
  '/subtasks/:subtaskId/reopen',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.reopenSubtask
);

// Unteraufgabe aktualisieren
router.put(
  '/subtasks/:subtaskId',
  authenticate,
  requirePermission('contracts:update'),
  contractTaskController.updateSubtask
);

// Unteraufgabe löschen
router.delete(
  '/subtasks/:subtaskId',
  authenticate,
  requirePermission('contracts:delete'),
  contractTaskController.deleteSubtask
);

export default router;
