import { Head } from '@inertiajs/react';
import { ColumnDef } from '@tanstack/react-table';
import { useMemo } from 'react';

import DashboardLayout from '@/components/dashboard/DashboardLayout';
import { DashboardPageHeader } from '@/components/dashboard/DashboardPageHeader';
import { Badge } from '@/components/ui/badge';
import { DataTable } from '@/components/ui/data-table';
import { DataTableColumnHeader } from '@/components/ui/data-table-column-header';
import { useTranslation } from '@/contexts/LanguageContext';
import { useAppDate } from '@/lib/date';
import { formatNumber } from '@/lib/format';

interface SearchQueryRow {
    id: number;
    query: string;
    query_hash: string;
    search_count: number;
    last_searched: string;
    created_at: string;
    updated_at: string;
}

interface Paginator<T> {
    data: T[];
    total: number;
    per_page: number;
    current_page: number;
}

interface Props {
    logs: Paginator<SearchQueryRow>;
}

function useColumns(t: (k: string, p?: Record<string, string | number>) => string): ColumnDef<SearchQueryRow>[] {
    const { formatDateTime } = useAppDate();
    return useMemo(() => [
        {
            accessorKey: 'query',
            header: ({ column }) => <DataTableColumnHeader column={column} title={t('Query')} />,
            cell: ({ row }) => <span className="font-medium">{row.original.query}</span>,
        },
        {
            accessorKey: 'search_count',
            header: ({ column }) => <DataTableColumnHeader column={column} title={t('Count')} />,
            cell: ({ row }) => (
                <Badge variant="secondary" className="font-mono">
                    {formatNumber(row.original.search_count)}
                </Badge>
            ),
        },
        {
            accessorKey: 'last_searched',
            header: ({ column }) => <DataTableColumnHeader column={column} title={t('Last searched')} />,
            cell: ({ row }) => (
                <span className="whitespace-nowrap text-xs text-muted-foreground">
                    {formatDateTime(row.original.last_searched)}
                </span>
            ),
        },
    ], [t, formatDateTime]);
}

export default function SearchLogs({ logs }: Props) {
    const { t } = useTranslation();
    const columns = useColumns(t);
    return (
        <DashboardLayout>
            <Head title={t('Search Queries')} />
            <DashboardPageHeader
                title={t('Search Queries')}
                subtitle={`${formatNumber(logs.total)} ${logs.total === 1 ? t('unique query') : t('unique queries')} — ${t('What your users typed into the search box, with frequency. Use to discover content gaps + popular topics.')}`}
            />
            <DataTable
                columns={columns}
                data={logs.data}
                searchKey="query"
                searchPlaceholder={t('Search queries…')}
            />
        </DashboardLayout>
    );
}
