/**
 * Admin Logs Page
 * Enterprise Logging System — Super Admin Console
 *
 * Paginated admin action logs with action/category/date filters, export,
 * and old/new value inspection.
 */

'use client';

import { useState } from 'react';
import { LogPageShell } from '@/components/logs/LogPageShell';
import { LogFilters } from '@/components/logs/LogFilters';
import { AdminLogsTable } from '@/components/logs/AdminLogsTable';
import { useLogsData } from '@/hooks/useLogsData';
import { loggingService } from '@/services/logging.service';
import type { AdminLog } from '@/types/logging.types';

const CATEGORY_OPTIONS = [
  { label: 'User Management', value: 'USER_MANAGEMENT' },
  { label: 'Wallet Management', value: 'WALLET_MANAGEMENT' },
  { label: 'Order Management', value: 'ORDER_MANAGEMENT' },
  { label: 'Trade Management', value: 'TRADE_MANAGEMENT' },
  { label: 'Role Management', value: 'ROLE_MANAGEMENT' },
  { label: 'Permission Management', value: 'PERMISSION_MANAGEMENT' },
  { label: 'Announcement', value: 'ANNOUNCEMENT' },
  { label: 'Commission', value: 'COMMISSION' },
  { label: 'Support', value: 'SUPPORT' },
  { label: 'KYC', value: 'KYC' },
  { label: 'Report', value: 'REPORT' },
  { label: 'System', value: 'SYSTEM' },
  { label: 'Other', value: 'OTHER' },
];

export default function AdminLogsPage() {
  const [category, setCategory] = useState('');
  const [filters, setFilters] = useState<{ from?: string; to?: string }>({});

  const { data, meta, loading, error, applyFilters, changePage } = useLogsData<AdminLog>({
    type: 'admin',
    fetcher: (params) => loggingService.getAdminLogs(params),
  });

  const handleApply = (f: any) => {
    setFilters({ from: f.from, to: f.to });
    applyFilters({ category: category || undefined, query: f.query, from: f.from, to: f.to });
  };

  return (
    <LogPageShell
      title="Admin Logs"
      description="Admin actions — bans, un-bans, wallet freezes, role/permission changes, announcements, commission changes, manual adjustments."
      logType="admin"
      loading={loading}
      error={error}
      exportFrom={filters.from}
      exportTo={filters.to}
      filters={
        <LogFilters
          onApply={handleApply}
          typeOptions={CATEGORY_OPTIONS}
          typeLabel="Category"
          typeValue={category}
          onTypeChange={setCategory}
          queryPlaceholder="Search action, admin ID, affected user..."
        />
      }
      table={
        <AdminLogsTable
          logs={data}
          page={meta.page}
          totalPages={meta.totalPages}
          total={meta.total}
          limit={meta.limit}
          onPageChange={changePage}
        />
      }
    />
  );
}

