import type { Translations } from './content-types'
import { t } from './content-template'

export interface LegalSection {
  title: Translations,
  paragraphs: Translations[]
}

export interface LegalBlock {
  anchor: string,
  title: Translations,
  sections: LegalSection[]
}

export type Legal = LegalBlock[]

export class LegalPageBuilder {
  static build(): Legal {
    return [
      this.buildImprint(),
      this.buildPrivacy(),
      this.buildAccessibility()
    ]
  }

  protected static buildImprint(): LegalBlock {
    return {
      anchor: 'imprint',
      title: {
        de: 'Impressum',
        en: 'Imprint'
      },
      sections: [
        this.buildImprintBusiness(),
        this.buildImprintLinks(),
        this.buildImprintDisclaimer(),
        this.buildImprintCopyright()
      ]
    }
  }

  protected static buildImprintBusiness(): LegalSection {
    return {
      title: t`${'business.name'}`,
      paragraphs: [
        {
          de: 'Informationen und Offenlegung gemäß §5 (1) ECG, § 25 MedienG, § 63 GewO und § 14 UGB:',
          en: 'Information and disclosure according to §5 (1) ECG, § 25 Media Act, § 63 Trade Regulation Act, and § 14 Commercial Code (UGB):'
        },
        {
          de: t`Betreiber: ${'business.operator'}\nAnschrift: ${'business.address'}\nTelefon: ${'business.phone'}\nEmail: ${'business.email'}`,
          en: t`Operator: ${'business.operator'}\nAddress: ${'business.address'}\nPhone: ${'business.phone'}\nEmail: ${'business.email'}`
        },
        {
          de: t`UID-Nr: ${'business.vat'}\nGewerbeaufsichtbehörde: ${'business.authority'}\nMitgliedschaft: ${'business.membership'}\nRechtsvorschrift: ${'business.regulation'}`,
          en: t`VAT ID: ${'business.vat'}\nSupervisory authority: ${'business.authority'}\nChamber membership: ${'business.membership'}\nLegal regulations: ${'business.regulation'}`
        }
      ]
    }
  }

  protected static buildImprintLinks(): LegalSection {
    return {
      title: {
        de: 'Verweise und Links',
        en: 'External Links'
      },
      paragraphs: [
        {
          de: 'Trotz sorgfältiger inhaltlicher Kontrolle übernimmt der Betreiber dieser Website keine Verantwortung für Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich. Sollten Sie dennoch auf einen ausgehenden Link stoßen, der auf eine Website mit rechtswidrigen Inhalten oder Tätigkeiten verweist, bitten wir um einen entsprechenden Hinweis. In einem solchen Fall wird der Link gemäß § 17 Abs. 2 ECG umgehend entfernt.',
          en: 'Despite careful content control, the operator of this website assumes no responsibility for the content of external links. The operators of the linked websites are solely responsible for their content. If you come across a link that leads to unlawful content or activity, we kindly ask for your notification. Such links will be removed promptly in accordance with § 17 (2) ECG.'
        },
        {
          de: 'Der Betreiber dieser Website achtet die Urheberrechte Dritter mit größtmöglicher Sorgfalt. Falls Sie dennoch eine Urheberrechtsverletzung bemerken, ersuchen wir ebenfalls um Mitteilung. Bei Bekanntwerden einer entsprechenden Rechtsverletzung werden die betroffenen Inhalte unverzüglich entfernt.',
          en: 'The operator of this website takes great care to respect the copyrights of third parties. If you notice any copyright infringement, please notify us. Upon becoming aware of such a violation, the affected content will be removed without delay.'
        }
      ]
    }
  }

  protected static buildImprintDisclaimer(): LegalSection {
    return {
      title: {
        de: 'Haftungsausschluss',
        en: 'Disclaimer'
      },
      paragraphs: [
        {
          de: 'Der Betreiber übernimmt keine Gewähr für die Aktualität, Richtigkeit, Vollständigkeit oder Qualität der bereitgestellten Informationen. Haftungsansprüche jeglicher Art, die durch die Nutzung oder Nichtnutzung der angebotenen Inhalte bzw. durch die Nutzung fehlerhafter oder unvollständiger Informationen verursacht werden, sind ausgeschlossen – sofern kein nachweislich vorsätzliches oder grob fahrlässiges Verschulden vorliegt. Alle Angebote sind freibleibend und unverbindlich. Der Betreiber behält sich ausdrücklich vor, Teile der Seiten oder das gesamte Angebot ohne gesonderte Ankündigung zu verändern, zu ergänzen, zu löschen oder die Veröffentlichung zeitweise oder endgültig einzustellen.',
          en: 'The operator assumes no liability for the accuracy, completeness, or quality of the information provided. Claims for damages of any kind arising from the use or non-use of the information presented, or from the use of incorrect or incomplete content, are excluded unless caused by demonstrably intentional or grossly negligent behavior. All offers are non-binding. The operator expressly reserves the right to modify, supplement, delete, or temporarily or permanently cease publication of parts of the site or the entire offer without prior notice.'
        },
        {
          de: 'Aufgrund der technischen Gegebenheiten des Internets kann keine Gewähr für die ständige Verfügbarkeit, Authentizität oder Fehlerfreiheit der Website übernommen werden. Jegliche Haftung für unmittelbare oder mittelbare Schäden, die durch die Nutzung oder vorübergehende Nichtverfügbarkeit der Website entstehen, ist – soweit gesetzlich zulässig – ausgeschlossen.',
          en: 'Due to the technical nature of the internet, no guarantee can be given for uninterrupted availability, authenticity, or accuracy of the website. Liability for any direct or indirect damages resulting from the use or temporary unavailability of this website is excluded to the extent permitted by law.'
        }
      ]
    }
  }

  protected static buildImprintCopyright(): LegalSection {
    return {
      title: {
        de: 'Urheberrecht und Nutzung',
        en: 'Copyright and Use'
      },
      paragraphs: [
        {
          de: 'Die Inhalte dieser Website (Texte, Bilder, Grafiken, Videos etc.) sind urheberrechtlich geschützt und ausschließlich für den persönlichen Gebrauch bestimmt. Eine darüber hinausgehende Nutzung – insbesondere die Vervielfältigung, Speicherung in Datenbanken, gewerbliche Nutzung oder Weitergabe an Dritte – ist ohne ausdrückliche Zustimmung des Betreibers nicht gestattet. Die Einbindung einzelner Seiten in fremde Frames ist unzulässig.',
          en: 'The content of this website (texts, images, graphics, videos, etc.) is protected by copyright and intended solely for personal use. Any further use — including reproduction, storage in databases, commercial use, or distribution to third parties — is not permitted without the explicit consent of the operator. Embedding individual pages of this website in external frames is prohibited.'
        },
        {
          de: 'Der Betreiber ist bemüht, in allen Publikationen Urheberrechte Dritter zu beachten oder auf lizenzfreie bzw. eigene Inhalte zurückzugreifen. Sollte dennoch eine Urheberrechtsverletzung vorliegen, bitten wir um einen Hinweis. Bei Bekanntwerden werden entsprechende Inhalte umgehend entfernt.',
          en: 'The operator makes every effort to respect the copyrights of third parties or to use either self-created or license-free content. If you suspect a copyright violation, please inform us. In such cases, the relevant content will be removed promptly.'
        }
      ]
    }
  }

  protected static buildPrivacy(): LegalBlock {
    return {
      anchor: 'privacy',
      title: {
        de: 'Datenschutz',
        en: 'Privacy Policy'
      },
      sections: [
        this.buildPrivacyIntroduction(),
        this.buildPrivacyData(),
        this.buildPrivacyLogs(),
        this.buildPrivacyCookies(),
        this.buildPrivacyRights()
      ]
    }
  }

  protected static buildPrivacyIntroduction(): LegalSection {
    return {
      title: {
        de: 'Einleitung',
        en: 'Introduction'
      },
      paragraphs: [
        {
          de: 'Der Schutz Ihrer persönlichen Daten ist uns ein wichtiges Anliegen. Wir behandeln Ihre Daten vertraulich und entsprechend der geltenden Datenschutzvorschriften (DSGVO, TKG 2003). Diese Erklärung informiert Sie darüber, welche Daten wir im Rahmen unseres Webauftritts erfassen, speichern und wie wir mit ihnen umgehen.',
          en: 'Protecting your personal data is very important to us. We treat your data confidentially and in accordance with applicable data protection laws (GDPR, TKG 2003). This policy explains what data is collected when you use our website, how it is processed, and how it is protected.'
        }
      ]
    }
  }

  protected static buildPrivacyData(): LegalSection {
    return {
      title: {
        de: 'Umgang mit personenbezogenen Daten',
        en: 'Handling of Personal Data'
      },
      paragraphs: [
        {
          de: 'Wenn Sie über unsere Website oder per E-Mail Kontakt mit uns aufnehmen, verarbeiten wir die von Ihnen bereitgestellten personenbezogenen Daten ausschließlich zur Bearbeitung Ihrer Anfrage oder für damit zusammenhängende Zwecke.',
          en: 'If you contact us via our website or by email, we will use the personal data you provide exclusively to process your inquiry or for related purposes.'
        },
        {
          de: 'Die Daten werden nur so lange gespeichert, wie es für die Erfüllung des jeweiligen Zwecks notwendig ist oder rechtliche Aufbewahrungspflichten dies vorsehen. Eine Weitergabe an Dritte erfolgt nicht, es sei denn, dies ist gesetzlich erforderlich oder Sie haben ausdrücklich zugestimmt.',
          en: 'Your data will only be stored as long as necessary to fulfill the intended purpose or as required by legal retention obligations. No data will be shared with third parties unless required by law or explicitly consented to by you.'
        }
      ]
    }
  }

  protected static buildPrivacyLogs(): LegalSection {
    return {
      title: {
        de: 'Serverprotokolle',
        en: 'Server Logs'
      },
      paragraphs: [
        {
          de: 'Beim Aufruf unserer Website werden automatisch Informationen durch den Webserver protokolliert (sogenannte Server-Logfiles). Dazu gehören unter anderem:',
          en: 'When visiting our website, technical information is automatically recorded by the web server (so-called server log files). This includes, for example:'
        },
        {
          de: '• IP-Adresse\n• Datum und Uhrzeit des Zugriffs\n• besuchte Seiten\n• verwendeter Browser und Betriebssystem\n• Spracheinstellungen\n• ggf. Referrer-URL',
          en: '• IP address\n• Date and time of access\n• Visited pages\n• Browser and operating system used\n• Language settings\n• Referrer URL (if applicable)'
        },
        {
          de: 'Diese Daten sind technisch notwendig, um den sicheren und stabilen Betrieb der Website zu gewährleisten. Sie lassen keinen direkten Rückschluss auf Ihre Person zu und werden nicht mit anderen Datenquellen zusammengeführt.',
          en: 'These logs are essential for the safe and stable operation of the site. The data does not allow for direct identification of users and is not merged with other data sources.'
        }
      ]
    }
  }

  protected static buildPrivacyCookies(): LegalSection {
    return {
      title: 'Cookies',
      paragraphs: [
        {
          de: 'Unsere Website verwendet ausschließlich technisch notwendige Cookies. Wir setzen keine Tracking-Technologien ein und analysieren keine Nutzerverhalten.',
          en: 'This website only uses technically necessary cookies. No tracking or analytics tools are in use.'
        },
        {
          de: 'Das einzige gesetzte Cookie dient der Unterscheidung zwischen Sommer- und Winterdarstellung der Website. Es enthält keine personenbezogenen Informationen und wird nur für diesen funktionalen Zweck verwendet.',
          en: 'The only cookie stored is used to toggle between summer and winter versions of the website. This cookie does not contain any personal information and is used solely for this visual adjustment.'
        }
      ]
    }
  }

  protected static buildPrivacyRights(): LegalSection {
    return {
      title: {
        de: 'Ihre Rechte',
        en: 'Your Rights'
      },
      paragraphs: [
        {
          de: 'Sie haben das Recht auf Auskunft über Ihre bei uns gespeicherten personenbezogenen Daten sowie auf Berichtigung, Löschung oder Einschränkung der Verarbeitung. Sie können der Datenverarbeitung jederzeit widersprechen und – sofern zutreffend – Ihr Recht auf Datenübertragbarkeit geltend machen.',
          en: 'You have the right to access your stored personal data, request correction or deletion, and restrict or object to processing. If applicable, you may also request data portability.'
        },
        {
          de: 'Wenn Sie der Ansicht sind, dass die Verarbeitung Ihrer Daten gegen geltendes Datenschutzrecht verstößt, haben Sie das Recht, sich bei der zuständigen Datenschutzbehörde zu beschweren oder uns direkt zu kontaktieren.',
          en: 'If you believe that your data is being processed in violation of data protection laws, you have the right to file a complaint with the relevant data protection authority or contact us directly.'
        }
      ]
    }
  }

  protected static buildAccessibility(): LegalBlock {
    return {
      anchor: 'accessibility',
      title: {
        de: 'Barrierefreiheit',
        en: 'Accessibility'
      },
      sections: [
        this.buildAccessibilityGeneral(),
        this.buildAccessibilityFramework(),
        this.buildAccessibilityContact(),
      ]
    }
  }

  protected static buildAccessibilityGeneral(): LegalSection {
    return {
      title: {
        de: 'Allgemeines',
        en: 'General Information'
      },
      paragraphs: [
        {
          de: 'Der Betreiber dieser Website ist bemüht, die Inhalte möglichst barrierefrei bereitzustellen. Auch wenn das österreichische Barrierefreiheitsgesetz (BaFG) für Kleinstunternehmen nicht verpflichtend ist, orientiert sich der Betreiber freiwillig an den anerkannten Richtlinien für barrierefreie Webinhalte (WCAG).',
          en: 'The operator of this website strives to make the content as accessible as possible. While the Austrian Accessibility Act (BaFG) does not apply to microenterprises, the operator voluntarily follows the recognized guidelines for accessible web content (WCAG).'
        }
      ]
    }
  }

  protected static buildAccessibilityFramework(): LegalSection {
    return {
      title: {
        de: 'Rechtlicher Rahmen',
        en: 'Legal Framework'
      },
      paragraphs: [
        {
          de: 'Laut österreichischem Barrierefreiheitsgesetz (BaFG) sind Kleinstunternehmen – also Betriebe mit weniger als zehn Mitarbeitenden und einem Jahresumsatz oder einer Bilanzsumme unter 2 Millionen Euro – von den gesetzlichen Verpflichtungen zur digitalen Barrierefreiheit ausgenommen, sofern ausschließlich Dienstleistungen online angeboten werden.',
          en: 'According to the Austrian Accessibility Act (BaFG), microenterprises — defined as businesses with fewer than ten employees and annual revenue or balance sheet totals under 2 million euros — are exempt from the legal obligations of digital accessibility, provided they only offer online services.'
        },
        {
          de: 'Der Betreiber fällt unter diese gesetzliche Ausnahme und ist daher nicht verpflichtet, eine formale Barrierefreiheitserklärung zu veröffentlichen.',
          en: 'The operator qualifies as such a microenterprise and is therefore not legally required to publish a formal accessibility statement.'
        },
        {
          de: 'Trotzdem wurde bei der Gestaltung der Website auf eine möglichst barrierearme Umsetzung geachtet. Dazu zählen unter anderem gut lesbare Schriftarten, ausreichende Farbkontraste, eine klare Inhaltsstruktur und die Bedienbarkeit ohne Maus. Ziel ist es, die Nutzung der Website für möglichst viele Menschen zugänglich zu machen.',
          en: 'Nevertheless, efforts have been made to design this website in a way that minimizes barriers. This includes readable fonts, sufficient color contrast, a clear content structure, and keyboard navigability. The goal is to make the website usable for as many people as possible.'
        }
      ]
    }
  }

  protected static buildAccessibilityContact(): LegalSection {
    return {
      title: {
        de: 'Kontakt bei Barrieren',
        en: 'Reporting Accessibility Issues'
      },
      paragraphs: [
        {
          de: t`Sollten Inhalte oder Funktionen dieser Website nicht barrierefrei zugänglich sein, wird um Rückmeldung gebeten. Hinweise können jederzeit per E-Mail an ${'business.email'} übermittelt werden.`,
          en: t`If you encounter any inaccessible content or functionality on this website, you are encouraged to report it. Please send your feedback via email to ${'business.email'}.`
        }
      ]
    }
  }
}
