import type { Page, Route } from '@playwright/test';
import { registerBaseApiMocks, superAdminUser } from './mock-api';

function json(route: Route, body: unknown, status = 200): Promise<void> {
  return route.fulfill({
    status,
    contentType: 'application/json',
    body: JSON.stringify(body),
  });
}

const dashboardOverview = {
  audience: 'department',
  stats: {
    total_tickets: 24,
    open_tickets: 10,
    closed_tickets: 14,
    tickets_today: 2,
    avg_response_time_hours: 3.5,
    avg_resolution_time_hours: 18.2,
    sla_compliance_rate: 92.5,
    overdue_tickets: 1,
    tickets_this_week: 8,
    tickets_this_month: 24,
    sla_met: 20,
    sla_warning: 2,
    sla_breached: 2,
  },
  sla: {
    total: 24,
    met: 20,
    warning: 2,
    breached: 2,
    active: 0,
    paused: 0,
    compliance_rate: 92.5,
  },
  charts: {
    tickets_by_status: { labels: ['Open', 'Closed'], data: [6, 4] },
    tickets_by_priority: { labels: ['High', 'Normal'], data: [3, 7] },
    tickets_by_category: { labels: ['Hardware'], data: [5] },
    sla_status: { labels: ['Met', 'Breached'], data: [20, 2] },
  },
  recent_tickets: [
    {
      id: 'ticket-1',
      ticket_number: 'TKT-001',
      subject: 'VPN not working',
      department_id: '00000000-0000-4000-8000-000000000003',
      assignee_id: '00000000-0000-4000-8000-000000000001',
      status: 'Open',
      priority: 'High',
      created_at: '2026-05-18T10:00:00Z',
      updated_at: '2026-05-18T12:00:00Z',
      closed_at: null,
    },
  ],
  recent_projects: [
    {
      id: 'project-1',
      name: 'Portal Redesign',
      key: 'PORT',
      status: 'active',
      department_id: '00000000-0000-4000-8000-000000000003',
      updated_at: '2026-05-18T14:00:00Z',
    },
  ],
};

const ticketDetail = {
  id: 'ticket-1',
  ticket_number: 'TKT-001',
  subject: 'VPN not working',
  description: 'Cannot connect to corporate VPN from home office.',
  department: { id: '00000000-0000-4000-8000-000000000003', name: 'IT Support', code: 'IT' },
  requester: { id: '00000000-0000-4000-8000-000000000001', name: 'E2E Agent', email: 'e2e@test.com' },
  assignee: null,
  status: {
    id: 'st-1',
    name_en: 'Open',
    name_ar: 'مفتوح',
    color: '#22c55e',
    is_closed: false,
  },
  priority: {
    id: 'pr-1',
    name_en: 'High',
    name_ar: 'عالي',
    color: '#ef4444',
    sort_order: 1,
  },
  category: null,
  subcategory: null,
  created_at: '2026-05-18T10:00:00Z',
  updated_at: '2026-05-18T12:00:00Z',
  replies: [],
  notes: [],
  attachments: [],
  status_history: [],
  collaborator_activity: [],
  sla_summary: null,
  collaborators: [],
};

export async function registerScreenshotMocks(page: Page): Promise<void> {
  await registerBaseApiMocks(page, superAdminUser);

  await Promise.all([
    page.route('**/api/v1/dashboard/overview**', (route) => json(route, dashboardOverview)),
    page.route('**/api/v1/dashboard/ticket-trends**', (route) =>
      json(route, {
        data: {
          labels: ['2026-05-10', '2026-05-11', '2026-05-12'],
          datasets: [
            { label: 'Created', data: [2, 4, 1] },
            { label: 'Closed', data: [1, 2, 3] },
          ],
        },
      }),
    ),
    page.route('**/api/v1/dashboard/assignee-performance**', (route) =>
      json(route, {
        data: {
          assignees: [
            {
              user_id: '00000000-0000-4000-8000-000000000001',
              user_name: 'E2E Agent',
              tickets_handled: 5,
              tickets_closed: 3,
            },
          ],
        },
      }),
    ),
    page.route('**/api/v1/tickets/ticket-1**', (route) => json(route, { data: ticketDetail })),
    page.route('**/api/v1/tickets/ticket-1/replies**', (route) => json(route, { data: [] })),
    page.route('**/api/v1/tickets/ticket-1/notes**', (route) => json(route, { data: [] })),
    page.route('**/api/v1/search**', (route) =>
      json(route, {
        data: {
          tickets: [ticketDetail],
          total_count: 1,
          search_time_ms: 8,
          filters_applied: {},
          pagination: {
            current_page: 1,
            per_page: 25,
            total_pages: 1,
            total_items: 1,
          },
        },
      }),
    ),
    page.route('**/api/v1/search/suggestions**', (route) => json(route, { data: [] })),
    page.route('**/api/v1/search/saved-filters**', (route) =>
      json(route, { data: { personal: [], shared: [], quick: [] } }),
    ),
    page.route('**/api/v1/users**', (route) =>
      json(route, {
        data: [
          {
            id: superAdminUser.id,
            name: superAdminUser.name,
            email: superAdminUser.email,
            is_active: true,
            departments: superAdminUser.departments,
          },
        ],
      }),
    ),
    page.route('**/api/v1/ticket-statuses**', (route) =>
      json(route, {
        data: [
          {
            id: 'st-1',
            name_en: 'Open',
            name_ar: 'مفتوح',
            color: '#22c55e',
            sort_order: 1,
            is_default: true,
            is_closed: false,
            is_resolved: false,
          },
        ],
      }),
    ),
    page.route('**/api/v1/ticket-priorities**', (route) =>
      json(route, {
        data: [
          {
            id: 'pr-1',
            name_en: 'High',
            name_ar: 'عالي',
            color: '#ef4444',
            sort_order: 1,
          },
        ],
      }),
    ),
    page.route('**/api/v1/onboarding/status**', (route) =>
      json(route, {
        data: {
          persona: 'department_head',
          department_id: '00000000-0000-4000-8000-000000000003',
          should_show_wizard: true,
          onboarding_step: 'portal',
          onboarding_completed_at: null,
          dismissed_tours: [],
          checklist: {
            persona: 'department_head',
            department_id: '00000000-0000-4000-8000-000000000003',
            total: 3,
            completed: 1,
            items: [
              { key: 'users', completed: false, route: '/admin/invites', action: 'invite' },
              { key: 'sla', completed: true, route: '/settings/sla', action: 'sla' },
              { key: 'categories', completed: false, route: '/admin/categories', action: 'categories' },
            ],
          },
        },
      }),
    ),
    page.route('**/api/v1/onboarding/checklist**', (route) =>
      json(route, {
        data: {
          total: 3,
          completed: 1,
          items: [
            { id: 'users', label: 'Invite users', completed: false },
            { id: 'sla', label: 'Configure SLA', completed: true },
            { id: 'categories', label: 'Add categories', completed: false },
          ],
        },
      }),
    ),
    page.route('**/api/v1/department-portals/it-support**', (route) =>
      json(route, {
        data: {
          id: '00000000-0000-4000-8000-000000000003',
          name_en: 'IT Support',
          name_ar: 'دعم تقنية المعلومات',
          slug: 'it-support',
          description_en: 'Submit and track support requests.',
          description_ar: null,
          company: {
            id: '00000000-0000-4000-8000-000000000002',
            name: 'Mountain View',
            logo_url: null,
          },
          portal_theme: null,
          portal_requires_membership: false,
          categories: [],
          priorities: [
            { id: 'pr-1', name_en: 'Normal', name_ar: 'عادي', color: '#6366f1' },
          ],
        },
      }),
    ),
  ]);
}
