import DynamicCertificate from '@/components/dynamic-certificate';
import DynamicMarksheet from '@/components/dynamic-marksheet';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
import { Card, CardContent } from '@/components/ui/card';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { StudentCourseProps } from '@/types/page';
import { usePage } from '@inertiajs/react';
import { format, parseISO } from 'date-fns';
import { Award, ClipboardList, Lock } from 'lucide-react';

const Certificate = () => {
   const { props } = usePage<StudentCourseProps>();
   const { course, watchHistory, completion, certificateTemplate, marksheetTemplate, studentMarks, auth } = props;

   // Check if course is completed
   const isCompleted = watchHistory?.completion_date || completion?.completion === 100;

   if (!isCompleted) {
      return (
         <Alert>
            <Lock className="h-4 w-4" />
            <AlertTitle>Zertifikat & Notenblatt gesperrt</AlertTitle>
            <AlertDescription>
               Schließe alle Kursmodule ab, um dein Zertifikat und Notenblatt freizuschalten. Dein aktueller Fortschritt: {completion?.completion || 0}%
            </AlertDescription>
         </Alert>
      );
   }

   const completionDate = watchHistory?.completion_date
      ? format(parseISO(watchHistory.completion_date), 'MMMM d, yyyy')
      : format(new Date(), 'MMMM d, yyyy');

   // Check if both are unavailable
   if (!certificateTemplate && !marksheetTemplate) {
      return (
         <div className="p-6">
            <Card>
               <CardContent className="flex flex-col items-center justify-center p-12 text-center">
                  <Award className="text-muted-foreground mb-4 h-16 w-16" />
                  <h3 className="mb-2 text-xl font-semibold">Kein Zertifikat oder Notenblatt verfügbar</h3>
                  <p className="text-muted-foreground">Der Dozent hat für diesen Kurs noch keine Zertifikate oder Notenblätter eingerichtet.</p>
               </CardContent>
            </Card>
         </div>
      );
   }

   return (
      <div>
         <Tabs defaultValue="certificate" className="w-full">
            <TabsList className="mb-6 grid h-11 w-full grid-cols-2">
               <TabsTrigger value="certificate" className="flex h-9 cursor-pointer items-center gap-2">
                  <Award className="h-4 w-4" />
                  Zertifikat
               </TabsTrigger>
               <TabsTrigger value="marksheet" className="flex h-9 cursor-pointer items-center gap-2">
                  <ClipboardList className="h-4 w-4" />
                  Notenblatt
               </TabsTrigger>
            </TabsList>

            <TabsContent value="certificate">
               {!certificateTemplate ? (
                  <Card>
                     <CardContent className="flex flex-col items-center justify-center p-12 text-center">
                        <Award className="text-muted-foreground mb-4 h-16 w-16" />
                        <h3 className="mb-2 text-xl font-semibold">Kein Zertifikat verfügbar</h3>
                        <p className="text-muted-foreground">Der Dozent hat für diesen Kurs noch keine Zertifikate eingerichtet.</p>
                     </CardContent>
                  </Card>
               ) : (
                  <DynamicCertificate
                     template={certificateTemplate}
                     courseName={course.title}
                     studentName={auth.user.name}
                     completionDate={completionDate}
                  />
               )}
            </TabsContent>

            <TabsContent value="marksheet">
               {!marksheetTemplate || !studentMarks ? (
                  <Card>
                     <CardContent className="flex flex-col items-center justify-center p-12 text-center">
                        <ClipboardList className="text-muted-foreground mb-4 h-16 w-16" />
                        <h3 className="mb-2 text-xl font-semibold">Kein Notenblatt verfügbar</h3>
                        <p className="text-muted-foreground">
                           {!marksheetTemplate
                              ? 'Der Dozent hat für diesen Kurs noch keine Notenblätter eingerichtet.'
                              : 'Keine Notendaten verfügbar. Schließe Aufgaben und Tests ab, um dein Notenblatt zu sehen.'}
                        </p>
                     </CardContent>
                  </Card>
               ) : (
                  <DynamicMarksheet
                     template={marksheetTemplate}
                     courseName={course.title}
                     studentName={auth.user.name}
                     completionDate={completionDate}
                     studentMarks={studentMarks}
                  />
               )}
            </TabsContent>
         </Tabs>
      </div>
   );
};

export default Certificate;
