import { describe, it, expect } from 'vitest';
import { webhookConfigRouter } from './webhookConfig.ts';

describe('webhookConfigRouter', () => {
  describe('Slack webhook procedures', () => {
    it('should have setSlackWebhook mutation', () => {
      expect(webhookConfigRouter._def.procedures.setSlackWebhook).toBeDefined();
    });

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

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

  describe('PagerDuty webhook procedures', () => {
    it('should have setPagerDutyKey mutation', () => {
      expect(webhookConfigRouter._def.procedures.setPagerDutyKey).toBeDefined();
    });

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

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

  describe('Email webhook procedures', () => {
    it('should have setEmailRecipients mutation', () => {
      expect(webhookConfigRouter._def.procedures.setEmailRecipients).toBeDefined();
    });

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

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

  describe('Configuration management procedures', () => {
    it('should have getConfig query', () => {
      expect(webhookConfigRouter._def.procedures.getConfig).toBeDefined();
    });

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

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

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

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

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

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

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

    it('should have proper procedure names', () => {
      const procedures = Object.keys(webhookConfigRouter._def.procedures);
      const expectedProcedures = [
        'getConfig',
        'setSlackWebhook',
        'setPagerDutyKey',
        'setEmailRecipients',
        'setSlackEnabled',
        'setPagerDutyEnabled',
        'setEmailEnabled',
        'testSlackWebhook',
        'testPagerDutyWebhook',
        'testEmailWebhook',
        'testAllWebhooks',
        'getTestResults',
        'getTestResultsByChannel',
        'getLatestTestResults',
        'validateConfig',
        'clearTestResults',
      ];

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