/**
 * Error Logs Page
 * Enterprise Logging System — Super Admin Console
 *
 * Paginated error logs with severity/method/status filters, export,
 * and sanitized stack-trace inspection.
 */

'use client';

import { useState } from 'react';
import { LogPageShell } from '@/components/logs/LogPageShell';
import { LogFilters } from '@/components/logs/LogFilters';
import { ErrorLogsTable } from '@/components/logs/ErrorLogsTable';
import { useLogsData } from '@/hooks/useLogsData';
import { loggingService } from '@/services/logging.service';
import type { ErrorLog } from '@/types/logging.types';

const SEVERITY_OPTIONS = [
  { label: 'Critical', value: 'CRITICAL' },
  { label: 'Error', value: 'ERROR' },
  { label: 'High', value: 'HIGH' },
  { label: 'Medium', value: 'MEDIUM' },
  { label: 'Low', value: 'LOW' },
  { label: 'Info', value: 'INFO' },
];

export default function ErrorLogsPage() {
  const [severity, setSeverity] = useState('');
  const [filters, setFilters] = useState<{ from?: string; to?: string }>({});

  const { data, meta, loading, error, applyFilters, changePage } = useLogsData<ErrorLog>({
    type: 'error',
    fetcher: (params) => loggingService.getErrorLogs(params),
  });

  const handleApply = (f: any) => {
    setFilters({ from: f.from, to: f.to });
    applyFilters({ severity: severity || undefined, query: f.query, from: f.from, to: f.to });
  };

  return (
    <LogPageShell
      title="Error Logs"
      description="Unhandled exceptions, API errors, validation/auth/authorization/database/WebSocket errors. Secrets are always redacted."
      logType="error"
      loading={loading}
      error={error}
      exportFrom={filters.from}
      exportTo={filters.to}
      filters={
        <LogFilters
          onApply={handleApply}
          typeOptions={SEVERITY_OPTIONS}
          typeLabel="Severity"
          typeValue={severity}
          onTypeChange={setSeverity}
          queryPlaceholder="Search message, route, service..."
        />
      }
      table={
        <ErrorLogsTable
          logs={data}
          page={meta.page}
          totalPages={meta.totalPages}
          total={meta.total}
          limit={meta.limit}
          onPageChange={changePage}
        />
      }
    />
  );
}

