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

interface MyCourse {
    id: number;
    slug: string;
    title: string;
    programme_title: string;
    total_lessons: number;
    completed_lessons: number;
    percent: number;
}

export default function Dashboard({
    currentProgramme,
    overallPercent,
    cpdCredits,
    portfolioAssetsCount,
    myCourses,
    certificationsCount,
    enrolmentStatus,
}: {
    currentProgramme: { title: string } | null;
    overallPercent: number;
    cpdCredits: number;
    portfolioAssetsCount: number;
    myCourses: MyCourse[];
    certificationsCount: number;
    enrolmentStatus: string | null;
}) {
    const roadmapSteps = [
        { label: 'Enrolment', status: enrolmentStatus ? 'done' : 'locked' },
        { label: 'Curriculum', status: overallPercent > 0 && overallPercent < 100 ? 'active' : overallPercent >= 100 ? 'done' : 'locked' },
        { label: 'Assessment', status: overallPercent >= 100 ? 'active' : 'locked' },
        { label: 'Certification', status: certificationsCount > 0 ? 'done' : 'locked' },
    ];

    return (
        <StudentLayout>
            <Head title="Dashboard" />

            <div className="flex items-center justify-between">
                <div>
                    <h1 className="text-institute-title text-on-surface">Leadership Dashboard</h1>
                    <p className="text-body-md text-on-surface-variant">Welcome back, continue your executive journey.</p>
                </div>
                <Button href={route('institutes.index')} variant="primary">
                    Enrol Now
                </Button>
            </div>

            <div className="mt-8 grid gap-6 md:grid-cols-3">
                <Card className="md:col-span-1">
                    <p className="text-label-caps text-accent-gold">Current Progress</p>
                    <p className="text-course-title mt-2 text-on-surface">
                        {currentProgramme?.title ?? 'No active Programme'}
                    </p>
                    <p className="mt-4 text-3xl font-bold text-on-surface">{overallPercent}%</p>
                    <ProgressBar percent={overallPercent} className="mt-3" />
                </Card>
                <StatTile label="CPD Credits" value={cpdCredits} />
                <StatTile label="Portfolio Assets" value={String(portfolioAssetsCount).padStart(2, '0')} />
            </div>

            <div className="mt-12 flex items-center justify-between">
                <h2 className="text-course-title text-on-surface">My Courses</h2>
                <Link href={route('student.portfolio.show')} className="text-sm font-medium text-jgcp-navy hover:underline">
                    View All
                </Link>
            </div>

            <div className="mt-6 grid gap-6 md:grid-cols-3">
                {myCourses.map((course) => (
                    <Card key={course.id}>
                        <p className="text-label-caps text-on-surface-variant">{course.programme_title}</p>
                        <h3 className="text-course-title mt-2 text-on-surface">{course.title}</h3>
                        <p className="mt-3 text-xs text-on-surface-variant">
                            {course.completed_lessons}/{course.total_lessons} Lessons · {course.percent}%
                        </p>
                        <ProgressBar percent={course.percent} className="mt-2" />
                        <Button href={route('student.courses.show', course.slug)} variant={course.percent > 0 ? 'primary' : 'secondary'} className="mt-5 w-full">
                            {course.percent > 0 ? 'Continue Learning' : 'Start Course'}
                        </Button>
                    </Card>
                ))}

                {myCourses.length === 0 && (
                    <Card className="md:col-span-3">
                        <p className="text-body-md text-on-surface-variant">
                            You are not yet enrolled in a Programme.{' '}
                            <Link href={route('institutes.index')} className="text-jgcp-navy hover:underline">
                                Browse Institutes
                            </Link>{' '}
                            to get started.
                        </p>
                    </Card>
                )}
            </div>

            <Card className="mt-12 !bg-surface-container-low">
                <p className="text-label-caps text-accent-gold">Secure Repository</p>
                <h2 className="text-course-title mt-2 text-on-surface">My Leadership Portfolio</h2>
                <p className="text-body-md mt-2 max-w-2xl text-on-surface-variant">
                    Your centralised digital safe for lifelong achievements — case studies, projects, and executive
                    reflections, assembled automatically from your activity.
                </p>
                <Button href={route('student.portfolio.show')} variant="primary" className="mt-6">
                    Open My Portfolio
                </Button>
            </Card>

            <div className="mt-12">
                <h2 className="text-course-title text-on-surface">Certification Roadmap</h2>
                <div className="mt-6 flex items-center gap-2">
                    {roadmapSteps.map((step, index) => (
                        <div key={step.label} className="flex flex-1 items-center gap-2">
                            <div className="flex flex-col items-center gap-2 text-center">
                                <div
                                    className={`flex h-10 w-10 items-center justify-center rounded-full text-sm ${
                                        step.status === 'done'
                                            ? 'bg-status-published text-white'
                                            : step.status === 'active'
                                              ? 'bg-jgcp-navy text-white'
                                              : 'bg-surface-container-high text-on-surface-variant'
                                    }`}
                                >
                                    {step.status === 'done' ? '✓' : index + 1}
                                </div>
                                <p className="text-xs text-on-surface-variant">{step.label}</p>
                            </div>
                            {index < roadmapSteps.length - 1 && (
                                <div className="h-px flex-1 bg-outline-variant" />
                            )}
                        </div>
                    ))}
                </div>
            </div>
        </StudentLayout>
    );
}
