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

interface Certification {
    id: number;
    title: string;
    institute: string;
    certificate_number: string;
    issued_at: string | null;
}

interface Submission {
    id: number;
    type: string;
    title: string;
    status: string;
    grade: string | null;
}

interface TranscriptRow {
    programme_title: string;
    status: string;
    completed_at: string | null;
}

const typeLabels: Record<string, string> = {
    written_project: 'Written Project',
    video_project: 'Video Presentation',
    practical_application: 'Practical Report',
    capstone: 'Capstone Project',
    quiz: 'Quiz',
    module_test: 'Module Test',
    final_exam: 'Final Examination',
};

export default function Show({
    certifications,
    submissions,
    transcript,
    isAlumni,
    shareLink,
}: {
    certifications: Certification[];
    submissions: Submission[];
    transcript: TranscriptRow[];
    isAlumni: boolean;
    shareLink: string | null;
}) {
    const toggleShare = () => {
        router.post(route('student.portfolio.share'), {}, { preserveScroll: true });
    };

    return (
        <StudentLayout>
            <Head title="My Leadership Portfolio" />

            <div className="flex flex-wrap items-center justify-between gap-4">
                <div>
                    <h1 className="text-institute-title text-on-surface">My Leadership Portfolio</h1>
                    <p className="text-body-md text-on-surface-variant">
                        Your lifelong record of executive excellence and institutional achievement.
                    </p>
                    {isAlumni && <Badge tone="gold">Alumni Member</Badge>}
                </div>
                <div className="flex gap-3">
                    <Button variant="secondary">Export PDF</Button>
                    <Button variant="primary" onClick={toggleShare}>
                        {shareLink ? 'Sharing Enabled' : 'Share Portfolio'}
                    </Button>
                </div>
            </div>

            {shareLink && (
                <Card className="mt-4 !bg-surface-container-low">
                    <p className="text-sm text-on-surface-variant">
                        Public link: <span className="font-medium text-jgcp-navy">{shareLink}</span>
                    </p>
                </Card>
            )}

            <section className="mt-10">
                <h2 className="text-course-title text-on-surface">Professional Certifications</h2>
                <div className="mt-4 grid gap-6 md:grid-cols-2">
                    {certifications.map((cert) => (
                        <Card key={cert.id}>
                            <p className="text-label-caps text-accent-gold">Flagship Programme</p>
                            <h3 className="text-course-title mt-2 text-on-surface">{cert.title}</h3>
                            <p className="text-sm text-on-surface-variant">{cert.institute}</p>
                            <div className="mt-4 flex items-center justify-between text-xs text-on-surface-variant">
                                <span>Issued {cert.issued_at}</span>
                                <span className="font-medium text-status-published">✓ Verify</span>
                            </div>
                        </Card>
                    ))}
                    {certifications.length === 0 && (
                        <Card className="md:col-span-2">
                            <p className="text-body-md text-on-surface-variant">
                                No Professional Certifications yet — complete a Programme's required courses and
                                assessments to earn your first certification.
                            </p>
                        </Card>
                    )}
                </div>
            </section>

            <section className="mt-12">
                <div className="flex items-center justify-between">
                    <h2 className="text-course-title text-on-surface">Project Showcase</h2>
                </div>
                <div className="mt-4 grid gap-6 md:grid-cols-3">
                    {submissions.map((submission) => (
                        <Card key={submission.id}>
                            <div className="flex items-center justify-between">
                                <Badge tone="neutral">{typeLabels[submission.type] ?? submission.type}</Badge>
                                <span className="text-xs font-medium uppercase text-status-published">
                                    {submission.status}
                                </span>
                            </div>
                            <p className="mt-3 text-sm font-semibold text-on-surface">{submission.title}</p>
                            {submission.grade && (
                                <p className="mt-1 text-xs text-on-surface-variant">Grade: {submission.grade}</p>
                            )}
                        </Card>
                    ))}
                    {submissions.length === 0 && (
                        <Card className="md:col-span-3">
                            <p className="text-body-md text-on-surface-variant">
                                Submitted written, video, and practical work will appear here once graded.
                            </p>
                        </Card>
                    )}
                </div>
            </section>

            <section className="mt-12">
                <h2 className="text-course-title text-on-surface">Academic Transcript</h2>
                <Card className="mt-4 overflow-x-auto p-0">
                    <table className="w-full text-left text-sm">
                        <thead className="border-b border-outline-variant text-on-surface-variant">
                            <tr>
                                <th className="px-6 py-3 font-medium">Programme</th>
                                <th className="px-6 py-3 font-medium">Completion Date</th>
                                <th className="px-6 py-3 font-medium">Status</th>
                            </tr>
                        </thead>
                        <tbody>
                            {transcript.map((row) => (
                                <tr key={row.programme_title} className="border-b border-outline-variant last:border-0">
                                    <td className="px-6 py-3 text-on-surface">{row.programme_title}</td>
                                    <td className="px-6 py-3 text-on-surface-variant">{row.completed_at ?? '—'}</td>
                                    <td className="px-6 py-3">
                                        <Badge tone={row.status === 'completed' ? 'published' : 'draft'}>
                                            {row.status}
                                        </Badge>
                                    </td>
                                </tr>
                            ))}
                        </tbody>
                    </table>
                </Card>
            </section>
        </StudentLayout>
    );
}
