import { describe, it, expect } from 'vitest';
import { escalationPolicyRouter } from './escalationPolicy.ts';

describe('escalationPolicyRouter', () => {
  describe('Policy management procedures', () => {
    it('should have listPolicies query', () => {
      expect(escalationPolicyRouter._def.procedures.listPolicies).toBeDefined();
    });

    it('should have getPolicy query', () => {
      expect(escalationPolicyRouter._def.procedures.getPolicy).toBeDefined();
    });

    it('should have getPoliciesForAlertType query', () => {
      expect(escalationPolicyRouter._def.procedures.getPoliciesForAlertType).toBeDefined();
    });

    it('should have createPolicy mutation', () => {
      expect(escalationPolicyRouter._def.procedures.createPolicy).toBeDefined();
    });

    it('should have updatePolicy mutation', () => {
      expect(escalationPolicyRouter._def.procedures.updatePolicy).toBeDefined();
    });

    it('should have deletePolicy mutation', () => {
      expect(escalationPolicyRouter._def.procedures.deletePolicy).toBeDefined();
    });
  });

  describe('Runbook management procedures', () => {
    it('should have listRunbooks query', () => {
      expect(escalationPolicyRouter._def.procedures.listRunbooks).toBeDefined();
    });

    it('should have getRunbook query', () => {
      expect(escalationPolicyRouter._def.procedures.getRunbook).toBeDefined();
    });

    it('should have getRunbookForAlertType query', () => {
      expect(escalationPolicyRouter._def.procedures.getRunbookForAlertType).toBeDefined();
    });

    it('should have createRunbook mutation', () => {
      expect(escalationPolicyRouter._def.procedures.createRunbook).toBeDefined();
    });

    it('should have updateRunbook mutation', () => {
      expect(escalationPolicyRouter._def.procedures.updateRunbook).toBeDefined();
    });

    it('should have deleteRunbook mutation', () => {
      expect(escalationPolicyRouter._def.procedures.deleteRunbook).toBeDefined();
    });
  });

  describe('Escalation execution procedures', () => {
    it('should have startEscalation mutation', () => {
      expect(escalationPolicyRouter._def.procedures.startEscalation).toBeDefined();
    });

    it('should have getActiveEscalation query', () => {
      expect(escalationPolicyRouter._def.procedures.getActiveEscalation).toBeDefined();
    });

    it('should have getEscalationsForAlert query', () => {
      expect(escalationPolicyRouter._def.procedures.getEscalationsForAlert).toBeDefined();
    });

    it('should have acknowledgeEscalation mutation', () => {
      expect(escalationPolicyRouter._def.procedures.acknowledgeEscalation).toBeDefined();
    });

    it('should have resolveEscalation mutation', () => {
      expect(escalationPolicyRouter._def.procedures.resolveEscalation).toBeDefined();
    });

    it('should have executeNextStep mutation', () => {
      expect(escalationPolicyRouter._def.procedures.executeNextStep).toBeDefined();
    });

    it('should have listActiveEscalations query', () => {
      expect(escalationPolicyRouter._def.procedures.listActiveEscalations).toBeDefined();
    });

    it('should have getEscalationsDueForNextStep query', () => {
      expect(escalationPolicyRouter._def.procedures.getEscalationsDueForNextStep).toBeDefined();
    });
  });

  describe('Router structure', () => {
    it('should have all 20 expected procedures', () => {
      const procedures = Object.keys(escalationPolicyRouter._def.procedures);
      expect(procedures.length).toBe(20);
    });

    it('should have proper procedure names', () => {
      const procedures = Object.keys(escalationPolicyRouter._def.procedures);
      const expectedProcedures = [
        'listPolicies',
        'getPolicy',
        'getPoliciesForAlertType',
        'createPolicy',
        'updatePolicy',
        'deletePolicy',
        'listRunbooks',
        'getRunbook',
        'getRunbookForAlertType',
        'createRunbook',
        'updateRunbook',
        'deleteRunbook',
        'startEscalation',
        'getActiveEscalation',
        'getEscalationsForAlert',
        'acknowledgeEscalation',
        'resolveEscalation',
        'executeNextStep',
        'listActiveEscalations',
        'getEscalationsDueForNextStep',
      ];

      expectedProcedures.forEach((proc) => {
        expect(procedures).toContain(proc);
      });
    });
  });
});
