import { Head, Link, router } from '@inertiajs/react';
import { useState } from 'react';
import StudentLayout from '@/Layouts/StudentLayout';
import Card from '@/Components/UI/Card';
import Button from '@/Components/UI/Button';
import ProgressBar from '@/Components/UI/ProgressBar';

interface LessonItem {
    id: number;
    title: string;
    duration_minutes: number | null;
    content_type: string;
    is_completed: boolean;
    is_active: boolean;
}

interface ModuleItem {
    id: number;
    title: string;
    lessons: LessonItem[];
}

export default function Show({
    course,
    activeLesson,
    progress,
}: {
    course: { id: number; title: string; code: string | null; facilitator_name: string | null; modules: ModuleItem[] };
    activeLesson: { id: number; title: string; transcript_text: string | null; duration_minutes: number | null } | null;
    progress: { completed: number; total: number };
}) {
    const [tab, setTab] = useState<'transcript' | 'notes' | 'resources'>('transcript');
    const percent = progress.total > 0 ? Math.round((progress.completed / progress.total) * 100) : 0;

    const markComplete = () => {
        if (!activeLesson) return;
        router.post(route('student.lessons.complete', activeLesson.id), {}, { preserveScroll: true });
    };

    return (
        <StudentLayout>
            <Head title={course.title} />

            <div className="grid gap-8 lg:grid-cols-[1fr_360px]">
                <div>
                    {course.code && <p className="text-label-caps text-accent-gold">{course.code}</p>}
                    <h1 className="text-institute-title mt-1 text-on-surface">{course.title}</h1>
                    <div className="mt-2 flex items-center gap-4 text-sm text-on-surface-variant">
                        {course.facilitator_name && <span>Facilitator: {course.facilitator_name}</span>}
                        {activeLesson?.duration_minutes && <span>{activeLesson.duration_minutes} mins duration</span>}
                    </div>

                    <div className="mt-6 flex aspect-video items-center justify-center rounded-lg bg-jgcp-navy">
                        <button
                            onClick={markComplete}
                            className="flex h-16 w-16 items-center justify-center rounded-full bg-white/10 text-white hover:bg-white/20"
                            aria-label="Play lesson"
                        >
                            ▶
                        </button>
                    </div>

                    <Card className="mt-6">
                        <div className="flex gap-6 border-b border-outline-variant pb-3 text-sm font-medium">
                            {(['transcript', 'notes', 'resources'] as const).map((t) => (
                                <button
                                    key={t}
                                    onClick={() => setTab(t)}
                                    className={`capitalize ${tab === t ? 'text-jgcp-navy' : 'text-on-surface-variant'}`}
                                >
                                    {t}
                                </button>
                            ))}
                        </div>

                        <div className="pt-4">
                            {tab === 'transcript' && (
                                <p className="text-body-md whitespace-pre-line text-on-surface-variant">
                                    {activeLesson?.transcript_text ?? 'No transcript available for this lesson yet.'}
                                </p>
                            )}
                            {tab === 'notes' && (
                                <p className="text-body-md text-on-surface-variant">
                                    Your personal notes for this lesson will appear here.
                                </p>
                            )}
                            {tab === 'resources' && (
                                <p className="text-body-md text-on-surface-variant">
                                    Downloadable resources for this lesson will appear here.
                                </p>
                            )}
                        </div>
                    </Card>
                </div>

                <div>
                    <Card>
                        <h2 className="text-course-title text-on-surface">{course.title}</h2>
                        <p className="mt-2 text-sm font-semibold text-status-published">
                            {percent}% Completed
                        </p>
                        <p className="text-xs text-on-surface-variant">
                            {progress.completed} / {progress.total} Lessons
                        </p>
                        <ProgressBar percent={percent} className="mt-3" />

                        <div className="mt-6 space-y-4">
                            {course.modules.map((module) => (
                                <div key={module.id}>
                                    <p className="text-label-caps text-on-surface-variant">Module</p>
                                    <p className="text-sm font-semibold text-on-surface">{module.title}</p>

                                    <div className="mt-2 space-y-1">
                                        {module.lessons.map((lesson) => (
                                            <div
                                                key={lesson.id}
                                                className={`flex items-center justify-between rounded px-3 py-2 text-sm ${
                                                    lesson.is_active
                                                        ? 'bg-secondary-container text-jgcp-navy'
                                                        : 'text-on-surface-variant'
                                                }`}
                                            >
                                                <span>
                                                    {lesson.is_completed ? '✓ ' : lesson.is_active ? '▶ ' : '🔒 '}
                                                    {lesson.title}
                                                </span>
                                                {lesson.duration_minutes && (
                                                    <span className="text-xs">{lesson.duration_minutes} mins</span>
                                                )}
                                            </div>
                                        ))}
                                    </div>
                                </div>
                            ))}
                        </div>

                        <div className="mt-6 grid grid-cols-2 gap-3">
                            <Button variant="secondary" className="justify-center">
                                AI Assistant
                            </Button>
                            <Button variant="secondary" className="justify-center">
                                Discuss
                            </Button>
                        </div>
                    </Card>

                    <div className="mt-4 text-right">
                        <Link href={route('student.dashboard')} className="text-sm text-on-surface-variant hover:underline">
                            ← Back to Dashboard
                        </Link>
                    </div>
                </div>
            </div>
        </StudentLayout>
    );
}
