/**
 * Request Logs Page
 * Enterprise Logging System — Super Admin Console
 *
 * Paginated HTTP request/API logs with method/status/date filters,
 * export, and sanitized header/query/body inspection.
 */

'use client';

import { useState } from 'react';
import { LogPageShell } from '@/components/logs/LogPageShell';
import { LogFilters } from '@/components/logs/LogFilters';
import { RequestLogsTable } from '@/components/logs/RequestLogsTable';
import { useLogsData } from '@/hooks/useLogsData';
import { loggingService } from '@/services/logging.service';
import type { RequestLog } from '@/types/logging.types';

const METHOD_OPTIONS = [
  { label: 'GET', value: 'GET' },
  { label: 'POST', value: 'POST' },
  { label: 'PUT', value: 'PUT' },
  { label: 'PATCH', value: 'PATCH' },
  { label: 'DELETE', value: 'DELETE' },
];

export default function RequestLogsPage() {
  const [method, setMethod] = useState('');
  const [filters, setFilters] = useState<{ from?: string; to?: string }>({});

  const { data, meta, loading, error, applyFilters, changePage } = useLogsData<RequestLog>({
    type: 'request',
    fetcher: (params) => loggingService.getRequestLogs(params),
  });

  const handleApply = (f: any) => {
    setFilters({ from: f.from, to: f.to });
    applyFilters({ method: method || undefined, query: f.query, from: f.from, to: f.to });
  };

  return (
    <LogPageShell
      title="Request Logs"
      description="Every HTTP API request — method, URL, status code, duration, IP, user, sanitized request context."
      logType="request"
      loading={loading}
      error={error}
      exportFrom={filters.from}
      exportTo={filters.to}
      filters={
        <LogFilters
          onApply={handleApply}
          typeOptions={METHOD_OPTIONS}
          typeLabel="Method"
          typeValue={method}
          onTypeChange={setMethod}
          queryPlaceholder="Search URL, IP address, user ID..."
        />
      }
      table={
        <RequestLogsTable
          logs={data}
          page={meta.page}
          totalPages={meta.totalPages}
          total={meta.total}
          limit={meta.limit}
          onPageChange={changePage}
        />
      }
    />
  );
}

