<?php
/**
 * Übersetzungen für das Angebots-PDF (Spanisch, Englisch, Deutsch).
 *
 * Die/der Mitarbeiter:in wählt im Formular die Dokumentsprache; sämtliche
 * festen Texte im PDF werden dann in dieser Sprache ausgegeben.
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class AG_I18n {

    /** Verfügbare Dokumentsprachen (Code => Anzeigename im Formular) */
    const DOC_LANGUAGES = array(
        'ES' => 'Spanisch (Español)',
        'EN' => 'Englisch (English)',
        'DE' => 'Deutsch',
    );

    /**
     * Gibt das komplette String-Set für eine Sprache zurück.
     *
     * @param string $lang 'ES' | 'EN' | 'DE'
     * @return array
     */
    public static function strings( $lang = 'ES' ) {
        $all = self::all();
        return isset( $all[ $lang ] ) ? $all[ $lang ] : $all['ES'];
    }

    /**
     * Idioma-Bezeichnung (unterrichtete Sprache) in der Dokumentsprache.
     *
     * @param string $taught_code Code der unterrichteten Sprache (DE/EN/ES/CAT/FR)
     * @param string $doc_lang    Dokumentsprache
     */
    public static function taught_language_name( $taught_code, $doc_lang = 'ES' ) {
        $map = array(
            'ES' => array( 'DE' => 'alemán',  'EN' => 'inglés',  'ES' => 'español',  'CAT' => 'catalán',    'FR' => 'francés' ),
            'EN' => array( 'DE' => 'German',  'EN' => 'English', 'ES' => 'Spanish',  'CAT' => 'Catalan',    'FR' => 'French' ),
            'DE' => array( 'DE' => 'Deutsch', 'EN' => 'Englisch','ES' => 'Spanisch', 'CAT' => 'Katalanisch','FR' => 'Französisch' ),
        );
        $set = isset( $map[ $doc_lang ] ) ? $map[ $doc_lang ] : $map['ES'];
        return isset( $set[ $taught_code ] ) ? $set[ $taught_code ] : $taught_code;
    }

    /**
     * Modalitäts-Optionen (Code => Label) in der Dokumentsprache.
     */
    public static function modality_options( $doc_lang = 'ES' ) {
        $map = array(
            'ES' => array(
                'presencial' => 'presencial en Die Schule',
                'domicilio'  => 'a domicilio',
                'online'     => 'online',
            ),
            'EN' => array(
                'presencial' => 'in-person at Die Schule',
                'domicilio'  => 'at your home',
                'online'     => 'online',
            ),
            'DE' => array(
                'presencial' => 'in Präsenz bei Die Schule',
                'domicilio'  => 'bei Ihnen zu Hause',
                'online'     => 'online',
            ),
        );
        return isset( $map[ $doc_lang ] ) ? $map[ $doc_lang ] : $map['ES'];
    }

    /**
     * Wochentagsnamen (0=Sonntag … 6=Samstag, wie JS getDay()) in der
     * Dokumentsprache, in der für Aufzählungen üblichen Form.
     */
    public static function weekday_names( $doc_lang = 'ES' ) {
        $map = array(
            'ES' => array( 0 => 'domingos', 1 => 'lunes', 2 => 'martes', 3 => 'miércoles', 4 => 'jueves', 5 => 'viernes', 6 => 'sábados' ),
            'EN' => array( 0 => 'Sundays', 1 => 'Mondays', 2 => 'Tuesdays', 3 => 'Wednesdays', 4 => 'Thursdays', 5 => 'Fridays', 6 => 'Saturdays' ),
            'DE' => array( 0 => 'sonntags', 1 => 'montags', 2 => 'dienstags', 3 => 'mittwochs', 4 => 'donnerstags', 5 => 'freitags', 6 => 'samstags' ),
        );
        return isset( $map[ $doc_lang ] ) ? $map[ $doc_lang ] : $map['ES'];
    }

    /**
     * Baut die Wochentags-Phrase, z. B. ES "los martes y jueves",
     * EN "on Tuesdays and Thursdays", DE "dienstags und donnerstags".
     *
     * @param int[]  $weekdays JS-Nummern (0=So … 6=Sa)
     * @param string $doc_lang
     * @return string leer, wenn keine Wochentage.
     */
    public static function weekday_phrase( array $weekdays, $doc_lang = 'ES' ) {
        if ( empty( $weekdays ) ) {
            return '';
        }
        // Mo-zuerst sortieren
        $order = array( 1, 2, 3, 4, 5, 6, 0 );
        $sorted = array();
        foreach ( $order as $n ) {
            if ( in_array( $n, $weekdays, true ) ) {
                $sorted[] = $n;
            }
        }
        $names = self::weekday_names( $doc_lang );
        $words = array();
        foreach ( $sorted as $n ) {
            if ( isset( $names[ $n ] ) ) {
                $words[] = $names[ $n ];
            }
        }
        if ( empty( $words ) ) {
            return '';
        }
        $and  = array( 'ES' => ' y ', 'EN' => ' and ', 'DE' => ' und ' );
        $conj = isset( $and[ $doc_lang ] ) ? $and[ $doc_lang ] : ' y ';
        if ( count( $words ) === 1 ) {
            $joined = $words[0];
        } else {
            $last   = array_pop( $words );
            $joined = implode( ', ', $words ) . $conj . $last;
        }
        if ( 'EN' === $doc_lang ) {
            return 'on ' . $joined;
        }
        if ( 'DE' === $doc_lang ) {
            return $joined;
        }
        return 'los ' . $joined;
    }

    /**
     * Setzt den Concepto-Satz aus den Bausteinen zusammen (in Dokumentsprache).
     *
     * @param array  $c        Bausteine: taught (Code), motivo, sessions, duration, unit, from, to, modality (Code)
     * @param string $doc_lang
     * @return string
     */
    public static function compose_concept( array $c, $doc_lang = 'ES' ) {
        $idioma    = self::taught_language_name( $c['taught'], $doc_lang );
        $motivo    = trim( (string) $c['motivo'] );
        $sessions  = trim( (string) $c['sessions'] );
        $duration  = trim( (string) $c['duration'] );
        $unit      = trim( (string) $c['unit'] );
        $from      = trim( (string) $c['from'] );
        $to        = trim( (string) $c['to'] );
        $mods      = self::modality_options( $doc_lang );
        $modality  = isset( $mods[ $c['modality'] ] ) ? $mods[ $c['modality'] ] : '';
        $weekdays  = isset( $c['weekdays'] ) && is_array( $c['weekdays'] ) ? array_map( 'intval', $c['weekdays'] ) : array();
        $wd_phrase = self::weekday_phrase( $weekdays, $doc_lang );

        if ( 'EN' === $doc_lang ) {
            $s = 'Private ' . $idioma . ' lessons';
            if ( '' !== $motivo )   { $s .= ' – ' . $motivo; }
            if ( '' !== $sessions ) { $s .= ', ' . $sessions . ' session(s) per week'; }
            if ( '' !== $wd_phrase ) { $s .= ( '' !== $sessions ? ' (' . $wd_phrase . ')' : ', ' . $wd_phrase ); }
            if ( '' !== $duration ) { $s .= ' of ' . $duration . ' ' . $unit . ' each'; }
            if ( '' !== $from && '' !== $to ) { $s .= ', from ' . $from . ' to ' . $to; }
            $s .= '.';
            if ( '' !== $modality ) { $s .= ' Format: ' . $modality . '.'; }
            return $s;
        }

        if ( 'DE' === $doc_lang ) {
            $s = $idioma . '-Privatunterricht';
            if ( '' !== $motivo )   { $s .= ' – ' . $motivo; }
            if ( '' !== $sessions ) { $s .= ', ' . $sessions . ' Einheit(en) pro Woche'; }
            if ( '' !== $wd_phrase ) { $s .= ( '' !== $sessions ? ' (' . $wd_phrase . ')' : ', ' . $wd_phrase ); }
            if ( '' !== $duration ) { $s .= ' à ' . $duration . ' ' . $unit; }
            if ( '' !== $from && '' !== $to ) { $s .= ', vom ' . $from . ' bis ' . $to; }
            $s .= '.';
            if ( '' !== $modality ) { $s .= ' Format: ' . $modality . '.'; }
            return $s;
        }

        // ES (Standard)
        $s = 'Clases particulares de ' . $idioma;
        if ( '' !== $motivo )   { $s .= ' – ' . $motivo; }
        if ( '' !== $sessions ) { $s .= ', ' . $sessions . ' sesión(es) por semana'; }
        if ( '' !== $wd_phrase ) { $s .= ( '' !== $sessions ? ' (' . $wd_phrase . ')' : ', ' . $wd_phrase ); }
        if ( '' !== $duration ) { $s .= ' de ' . $duration . ' ' . $unit . ' cada una'; }
        if ( '' !== $from && '' !== $to ) { $s .= ', del ' . $from . ' al ' . $to; }
        $s .= '.';
        if ( '' !== $modality ) { $s .= ' Modalidad: ' . $modality . '.'; }
        return $s;
    }

    /**
     * Alle festen PDF-Texte je Sprache.
     */
    private static function all() {
        return array(
            'ES' => array(
                'title'        => 'PRESUPUESTO',
                'subtitle'     => 'Clases particulares · niños, jóvenes y adultos',
                'number'       => 'Número:',
                'date'         => 'Fecha:',
                'client'       => 'Cliente:',
                'id'           => 'DNI/NIF/NIE:',
                'address'      => 'Dirección:',
                'intro'        => 'Por la presente nos complace ofrecerles la siguiente propuesta de clases particulares, pensadas a medida para el alumno/a y su ritmo de aprendizaje:',
                'badge1'       => 'Atención 100% individual',
                'badge2'       => 'Profesorado nativo cualificado',
                'badge3'       => 'Horarios flexibles a tu medida',
                'th_qty'       => 'Cantidad',
                'th_concept'   => 'Concepto',
                'th_price'     => 'Precio / unidad *',
                'th_units'     => 'Unidades *',
                'th_amount'    => 'Importe',
                'no_items'     => '— sin conceptos —',
                'discount'     => 'DESCUENTO INTEGRADO EN EL PRESUPUESTO',
                'sum'          => 'SUMA IMPORTES',
                'vat'          => 'IVA',
                'total'        => 'TOTAL',
                'unit_line'    => 'Unidad aplicada en este presupuesto:',
                'unit_h'       => 'h (60 min)',
                'unit_hl'      => 'hl (45 min)',
                'legal_unit'   => '*Unidad = h, hora completa (60 minutos) o hl, hora lectiva (45 minutos). Marcada arriba la unidad aplicada en este presupuesto.',
                'legal_vat'    => 'La formación está exenta de IVA en virtud del Art. 20, punto 9 de la Ley IVA 37/1992. Los libros no están incluidos en el importe del presupuesto.',
                'pay_title'    => 'Formas de pago',
                'pay_full'     => 'Para la validez de la inscripción el pago total del curso debe realizarse en el momento de inscripción en efectivo, con tarjeta de crédito, transferencia bancaria o con un cheque a nombre de Die Schule SL. Si el monto del pago completo es superior a 500,00 EUR aplicamos un descuento de un 2,5% sobre el coste total del curso.',
                'pay_sepa'     => 'Para la validez de la inscripción se realiza una paga y señal de un 25% del monto completo, que va a cuenta del coste total del curso. El pago de los costes del curso se realiza mensualmente por domiciliación bancaria (SEPA). Esa forma de pago solo es aplicable si el monto total es superior a 500,00 EUR.',
                'closing'      => 'Esperando que este presupuesto sea de su agrado, les saludamos muy atentamente.',
                'note_label'   => 'NOTA:',
                'note_text'    => 'En caso de conformidad, rogamos nos envíen este documento firmado y sellado al siguiente correo electrónico %s, complementando los siguientes datos.',
                'sig_name'     => 'Nombre y apellidos:',
                'sig_email'    => 'Email:',
                'sig_id'       => 'DNI/NIE:',
                'sig_schedule' => 'Horario preferido:',
                'sig_phone'    => 'Tel:',
                'sig_sign'     => 'Conformidad / Firma:',
                'sig_address'  => 'Dirección:',
                'bank_label'   => 'Datos bancarios',
            ),
            'EN' => array(
                'title'        => 'QUOTE',
                'subtitle'     => 'Private lessons · children, teenagers and adults',
                'number'       => 'Number:',
                'date'         => 'Date:',
                'client'       => 'Client:',
                'id'           => 'ID / DNI / NIE:',
                'address'      => 'Address:',
                'intro'        => 'We are pleased to offer you the following proposal for private lessons, tailored to the student and their learning pace:',
                'badge1'       => '100% individual attention',
                'badge2'       => 'Qualified native teachers',
                'badge3'       => 'Flexible schedules',
                'th_qty'       => 'Quantity',
                'th_concept'   => 'Description',
                'th_price'     => 'Price / unit *',
                'th_units'     => 'Units *',
                'th_amount'    => 'Amount',
                'no_items'     => '— no items —',
                'discount'     => 'DISCOUNT INCLUDED IN THE QUOTE',
                'sum'          => 'SUBTOTAL',
                'vat'          => 'VAT',
                'total'        => 'TOTAL',
                'unit_line'    => 'Unit applied in this quote:',
                'unit_h'       => 'h (60 min)',
                'unit_hl'      => 'hl (45 min)',
                'legal_unit'   => '*Unit = h, full hour (60 minutes) or hl, teaching hour (45 minutes). The unit applied in this quote is marked above.',
                'legal_vat'    => 'Tuition is exempt from VAT under Art. 20, point 9 of the Spanish VAT Law 37/1992. Books are not included in the quoted amount.',
                'pay_title'    => 'Payment methods',
                'pay_full'     => 'For the enrolment to be valid, the full course fee must be paid at the time of enrolment in cash, by credit card, bank transfer or by cheque payable to Die Schule SL. If the full payment exceeds 500.00 EUR, we apply a 2.5% discount on the total course cost.',
                'pay_sepa'     => 'For the enrolment to be valid, a deposit of 25% of the total amount is paid towards the total course cost. The remaining course fees are paid monthly by direct debit (SEPA). This payment method only applies if the total amount exceeds 500.00 EUR.',
                'closing'      => 'We hope this quote meets your expectations and remain at your disposal.',
                'note_label'   => 'NOTE:',
                'note_text'    => 'If you agree, please return this document signed and stamped to the following email address %s, completing the details below.',
                'sig_name'     => 'Full name:',
                'sig_email'    => 'Email:',
                'sig_id'       => 'ID / NIE:',
                'sig_schedule' => 'Preferred schedule:',
                'sig_phone'    => 'Phone:',
                'sig_sign'     => 'Agreement / Signature:',
                'sig_address'  => 'Address:',
                'bank_label'   => 'Bank details',
            ),
            'DE' => array(
                'title'        => 'ANGEBOT',
                'subtitle'     => 'Privatunterricht · Kinder, Jugendliche und Erwachsene',
                'number'       => 'Nummer:',
                'date'         => 'Datum:',
                'client'       => 'Kunde:',
                'id'           => 'Ausweis-Nr.:',
                'address'      => 'Adresse:',
                'intro'        => 'Hiermit unterbreiten wir Ihnen gerne folgendes Angebot für Privatunterricht, individuell auf die Schülerin/den Schüler und das Lerntempo zugeschnitten:',
                'badge1'       => '100% individuelle Betreuung',
                'badge2'       => 'Qualifizierte Muttersprachler:innen',
                'badge3'       => 'Flexible Zeiten nach Maß',
                'th_qty'       => 'Anzahl',
                'th_concept'   => 'Beschreibung',
                'th_price'     => 'Preis / Einheit *',
                'th_units'     => 'Einheiten *',
                'th_amount'    => 'Betrag',
                'no_items'     => '— keine Positionen —',
                'discount'     => 'IM ANGEBOT ENTHALTENER RABATT',
                'sum'          => 'ZWISCHENSUMME',
                'vat'          => 'USt.',
                'total'        => 'GESAMT',
                'unit_line'    => 'In diesem Angebot verwendete Einheit:',
                'unit_h'       => 'h (60 Min.)',
                'unit_hl'      => 'hl (45 Min.)',
                'legal_unit'   => '*Einheit = h, volle Stunde (60 Minuten) oder hl, Unterrichtsstunde (45 Minuten). Die verwendete Einheit ist oben markiert.',
                'legal_vat'    => 'Der Unterricht ist gemäß Art. 20, Punkt 9 des spanischen USt.-Gesetzes 37/1992 von der USt. befreit. Bücher sind im Angebotsbetrag nicht enthalten.',
                'pay_title'    => 'Zahlungsarten',
                'pay_full'     => 'Für die Gültigkeit der Anmeldung ist die vollständige Kursgebühr bei der Anmeldung zu zahlen – bar, per Kreditkarte, Überweisung oder Scheck zugunsten der Die Schule SL. Bei einer Vollzahlung über 500,00 EUR gewähren wir 2,5% Rabatt auf die Gesamtkosten des Kurses.',
                'pay_sepa'     => 'Für die Gültigkeit der Anmeldung wird eine Anzahlung von 25% des Gesamtbetrags geleistet, die auf die Gesamtkosten angerechnet wird. Die restlichen Kursgebühren werden monatlich per Lastschrift (SEPA) gezahlt. Diese Zahlungsart ist nur bei einem Gesamtbetrag über 500,00 EUR möglich.',
                'closing'      => 'Wir hoffen, dass Ihnen dieses Angebot zusagt, und verbleiben mit freundlichen Grüßen.',
                'note_label'   => 'HINWEIS:',
                'note_text'    => 'Bei Einverständnis senden Sie uns dieses Dokument bitte unterschrieben und gestempelt an folgende E-Mail-Adresse %s und ergänzen Sie die untenstehenden Angaben.',
                'sig_name'     => 'Vor- und Nachname:',
                'sig_email'    => 'E-Mail:',
                'sig_id'       => 'Ausweis-Nr.:',
                'sig_schedule' => 'Bevorzugte Zeiten:',
                'sig_phone'    => 'Tel.:',
                'sig_sign'     => 'Einverständnis / Unterschrift:',
                'sig_address'  => 'Adresse:',
                'bank_label'   => 'Bankverbindung',
            ),
        );
    }
}
