import DayNavigator from '@/Components/DayNavigator';
import PrintButton from '@/Components/PrintButton';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import EcgMetricChart from '@/Pages/Metric/EcgMetricChart';
import { AggregatedMetricData, Ecg, User } from '@/types';
import { Head, router, usePage } from '@inertiajs/react';
import dayjs, { Dayjs } from 'dayjs';
import { useState } from 'react';

interface MetricDetailProps {
    measures: Ecg[];
    patient: User;
    availableDates: string[];
    measuresByHour: AggregatedMetricData[];
}

export default function EcgMetricDetail({
    measures,
    patient,
    availableDates,
}: MetricDetailProps) {
    const user = usePage().props.auth.user;
    const now = dayjs();
    const { filters } = usePage().props;
    const [date, setDate] = useState(filters?.date || now.format('YYYY-MM-DD'));

    const onDateChange = (updatedDate: Dayjs) => {
        const dateString = dayjs(updatedDate).format('YYYY-MM-DD');
        setDate(dateString);

        // Immediately send search request
        router.get(
            route('ecg.detail', { patient: patient.id }),
            {
                date: dateString,
            },
            {
                preserveState: true,
                preserveScroll: true,
                replace: true, // Prevent duplicate history entries
            },
        );
    };
    let data: { date: number; average: number }[] = [];

    const backLinkLabel =
        patient.id === user.id
            ? 'Dashboard'
            : `${patient.name} ${patient.surname}`;

    const renderCharts = () => {
        return measures.map((measure) => {
            if (measure) {
                data = measure.signals.map((signal, index) => {
                    return {
                        date: index,
                        average: signal,
                    };
                });
            }

            const frequency = measure ? measure.sampling_frequency : null;

            return (
                <EcgMetricChart
                    key={measure.id}
                    data={data}
                    frequency={frequency ?? 0}
                    measuredAt={dayjs(measure.measured_at)}
                    deviceName={measure.device_label ?? measure.device_name}
                />
            );
        });
    };

    return (
        <AuthenticatedLayout
            backLink={route('dashboard.personal', { target: patient.id })}
            backLinkLabel={backLinkLabel}
        >
            <Head title="ECG" />

            <div className="py-2">
                <div className="mx-auto max-w-7xl sm:px-6 lg:px-8">
                    <div className="overflow-hidden sm:rounded-lg">
                        <div className="p-6 text-gray-900">
                            <div className="scroll-m-20 pb-8 text-4xl font-semibold tracking-tight lg:text-5xl">
                                ECG
                            </div>
                            <div className="flex justify-center gap-2 md:justify-end">
                                <PrintButton />
                                <DayNavigator
                                    date={dayjs(date)}
                                    onChange={onDateChange}
                                    availableDates={availableDates}
                                />
                            </div>
                            <div>
                                <div>{renderCharts()}</div>
                                <div className="flex w-full justify-center">
                                    <div className="max-w-2xl">
                                        <div>
                                            <div className="mt-8 flex gap-4 md:flex-row"></div>
                                            <div className="mt-8 text-zinc-500 print:hidden">
                                                L'ECG (elettrocardiogramma)
                                                misura l'attività elettrica del
                                                cuore, utile per monitorare
                                                ritmo e frequenza cardiaca.
                                                Valori significativi includono
                                                la frequenza cardiaca (normale:
                                                60-100 bpm) e anomalie come
                                                aritmie o battiti irregolari.
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </AuthenticatedLayout>
    );
}
