"use client";

import * as React from "react";
import {
  Page as PDFPage,
  Text as PDFText,
  View as PDFView,
  StyleSheet as PDFStyleSheet,
} from "@react-pdf/renderer";
import {
  pdfStyles,
  Header,
  Footer,
  FoldingMarks,
  DocumentTitle,
} from "./pdf/SharedUI.js";
import { SimpleLayout } from "./pdf/SimpleLayout.js";

const localStyles = PDFStyleSheet.create({
  sectionContainer: {
    marginTop: 0,
  },
  agbSection: {
    marginBottom: 20,
  },
  labelRow: {
    flexDirection: "row",
    alignItems: "baseline",
    marginBottom: 6,
  },
  monoNumber: {
    fontSize: 7,
    fontWeight: "bold",
    color: "#94a3b8",
    letterSpacing: 2,
    width: 25,
  },
  sectionTitle: {
    fontSize: 9,
    fontWeight: "bold",
    color: "#000000",
    textTransform: "uppercase",
    letterSpacing: 0.5,
  },
  officialText: {
    fontSize: 8,
    lineHeight: 1.5,
    color: "#334155",
    textAlign: "justify",
    paddingLeft: 25,
  },
});

const AGBSection = ({
  index,
  title,
  children,
}: {
  index: string;
  title: string;
  children: React.ReactNode;
}) => (
  <PDFView style={localStyles.agbSection} wrap={false}>
    <PDFView style={localStyles.labelRow}>
      <PDFText style={localStyles.monoNumber}>{index}</PDFText>
      <PDFText style={localStyles.sectionTitle}>{title}</PDFText>
    </PDFView>
    <PDFText style={localStyles.officialText}>{children}</PDFText>
  </PDFView>
);

interface AgbsPDFProps {
  headerIcon?: string;
  footerLogo?: string;
  mode?: "estimation" | "full";
}

export const AgbsPDF = ({
  headerIcon,
  footerLogo,
  mode = "full",
}: AgbsPDFProps) => {
  const date = new Date().toLocaleDateString("de-DE", {
    year: "numeric",
    month: "long",
    day: "numeric",
  });

  const companyData = {
    name: "Marc Mintel",
    address1: "Georg-Meistermann-Straße 7",
    address2: "54586 Schüller",
    ustId: "DE367588065",
  };

  const bankData = {
    name: "N26",
    bic: "NTSBDEB1XXX",
    iban: "DE50 1001 1001 2620 4328 65",
  };

  const content = (
    <>
      <DocumentTitle
        title="Allgemeine Geschäftsbedingungen"
        subLines={[`Stand: ${date}`]}
      />
      <PDFView style={localStyles.sectionContainer}>
        <AGBSection index="01" title="Geltungsbereich">
          Diese Allgemeinen Geschäftsbedingungen gelten für alle Verträge
          zwischen Marc Mintel (nachfolgend „Auftragnehmer“) und dem jeweiligen
          Kunden (nachfolgend „Auftraggeber“). Abweichende oder ergänzende
          Bedingungen des Auftraggebers werden nicht Vertragsbestandteil, auch
          wenn ihrer Geltung nicht ausdrücklich widersprochen wird.
        </AGBSection>

        <AGBSection index="02" title="Vertragsgegenstand">
          Der Auftragnehmer erbringt Dienstleistungen im Bereich:
          Webentwicklung, technische Umsetzung digitaler Systeme, Funktionen,
          Schnittstellen und Automatisierungen sowie Hosting, Betrieb und
          Wartung, sofern ausdrücklich vereinbard. Der Auftragnehmer schuldet
          ausschließlich die vereinbarte technische Leistung, nicht jedoch einen
          wirtschaftlichen Erfolg, bestimmte Umsätze, Conversions, Reichweiten,
          Suchmaschinen-Rankings oder rechtliche Ergebnisse.
        </AGBSection>

        <AGBSection index="03" title="Mitwirkungspflichten des Auftraggebers">
          Der Auftraggeber verpflichtet sich, alle zur Leistungserbringung
          erforderlichen Inhalte, Informationen, Zugänge und Entscheidungen
          rechtzeitig, vollständig und korrekt bereitzustellen. Hierzu zählen
          insbesondere Texte, Bilder, Videos, Produktdaten, Freigaben, Feedback,
          Zugangsdaten sowie rechtlich erforderliche Inhalte (z. B. Impressum,
          DSGVO). Verzögerungen oder Unterlassungen führen zu Verschiebungen
          aller Termine ohne Schadensersatzanspruch.
        </AGBSection>

        <AGBSection index="04" title="Ausführungs- und Bearbeitungszeiten">
          Angegebene Bearbeitungszeiten sind unverbindliche Schätzungen, keine
          garantierten Fristen. Fixe Termine oder Deadlines gelten nur, wenn sie
          ausdrücklich schriftlich als verbindlich vereinbart wurden.
        </AGBSection>

        <AGBSection index="05" title="Abnahme">
          Die Leistung gilt als abgenommen, wenn der Auftraggeber sie produktiv
          nutzt oder innerhalb von 7 Tagen nach Bereitstellung keine
          wesentlichen Mängel angezeigt werden. Optische Abweichungen,
          Geschmacksfragen oder subjektive Einschätzungen stellen keine Mängel
          dar.
        </AGBSection>

        <AGBSection index="06" title="Haftung">
          Der Auftragnehmer haftet nur für Schäden, die auf vorsätzlicher oder
          grob fahrlässiger Pflichtverletzung beruhen. Eine Haftung für
          entgangenen Gewinn, Umsatzausfälle, Datenverlust,
          Betriebsunterbrechungen, mittelbare oder Folgeschäden ist
          ausgeschlossen, soweit gesetzlich zulässig.
        </AGBSection>

        <AGBSection index="07" title="Verfügbarkeit & Betrieb">
          Bei vereinbartem Hosting oder Betrieb schuldet der Auftragnehmer keine
          permanente Verfügbarkeit. Wartungsarbeiten, Updates,
          Sicherheitsmaßnahmen oder externe Störungen können zu zeitweisen
          Einschränkungen führen und begründen keine Haftungsansprüche.
        </AGBSection>

        <AGBSection index="07a" title="Betriebs- und Pflegeleistung">
          Die Betriebs- und Pflegeleistung umfasst ausschließlich die
          Sicherstellung des technischen Betriebs, Wartung, Updates,
          Fehlerbehebung der bestehenden Systeme sowie Pflege bestehender
          Datensätze ohne Strukturänderung. Nicht Bestandteil sind die
          Erstellung neuer Inhalte (Blogartikel, News, Produkte), redaktionelle
          Tätigkeiten, strategische Planung oder der Aufbau neuer
          Features/Datenmodelle. Leistungen darüber hinaus gelten als
          Neuentwicklung.
        </AGBSection>

        <AGBSection index="08" title="Drittanbieter & externe Systeme">
          Der Auftragnehmer übernimmt keine Verantwortung für Leistungen,
          Ausfälle oder Änderungen externer Dienste, APIs, Schnittstellen oder
          Plattformen Dritter. Eine Funktionsfähigkeit kann nur im Rahmen der
          jeweils aktuellen externen Schnittstellen gewährleistet werden.
        </AGBSection>

        <AGBSection index="09" title="Inhalte & Rechtliches">
          Der Auftraggeber ist allein verantwortlich für Inhalte, rechtliche
          Konformität (DSGVO, Urheberrecht etc.) sowie bereitgestellte Daten.
          Der Auftragnehmer übernimmt keine rechtliche Prüfung.
        </AGBSection>

        <AGBSection index="10" title="Vergütung & Zahlungsverzug">
          Alle Preise netto zzgl. MwSt. Rechnungen sind innerhalb von 7 Tagen
          fällig. Bei Zahlungsverzug ist der Auftragnehmer berechtigt,
          Leistungen auszusetzen, Systeme offline zu nehmen oder laufende
          Arbeiten zu stoppen.
        </AGBSection>

        <AGBSection index="11" title="Kündigung laufender Leistungen">
          Laufende Leistungen (z. B. Hosting & Betrieb) können mit einer Frist
          von 4 Wochen zum Monatsende gekündigt werden, sofern nichts anderes
          vereinbart ist.
        </AGBSection>

        <AGBSection index="12" title="Schlussbestimmungen">
          Es gilt das Recht der Bundesrepublik Deutschland. Gerichtsstand ist
          der Sitz des Auftragnehmers. Sollte eine Bestimmung unwirksam sein,
          bleibt die Wirksamkeit der übrigen Regelungen unberührt.
        </AGBSection>
      </PDFView>
    </>
  );

  if (mode === "full") {
    return (
      <SimpleLayout
        companyData={companyData}
        bankData={bankData}
        footerLogo={footerLogo}
        icon={headerIcon}
        pageNumber="10"
        showPageNumber={false}
      >
        {content}
      </SimpleLayout>
    );
  }

  return (
    <PDFPage size="A4" style={pdfStyles.page}>
      <FoldingMarks />
      <Header icon={headerIcon} showAddress={false} />
      {content}
      <Footer
        logo={footerLogo}
        companyData={companyData}
        bankData={bankData}
        showDetails={false}
        showPageNumber={false}
      />
    </PDFPage>
  );
};
