<?php

declare(strict_types=1);

namespace Lab;

final class I18n
{
    public static function boot(): void
    {
        if (\PHP_OS_FAMILY === 'Darwin') {
            self::set('el');

            return;
        }
        $fromGet = strtolower(trim((string) ($_GET['lang'] ?? '')));
        if ($fromGet === 'en' || $fromGet === 'el') {
            self::set($fromGet);

            return;
        }
        $fromSession = (string) ($_SESSION['lab_lang'] ?? '');
        if ($fromSession === 'en' || $fromSession === 'el') {
            return;
        }
        $fromCookie = strtolower((string) ($_COOKIE['lab_lang'] ?? ''));
        if ($fromCookie === 'en' || $fromCookie === 'el') {
            $_SESSION['lab_lang'] = $fromCookie;
        }
    }

    public static function set(string $lang): void
    {
        $lang = $lang === 'en' ? 'en' : 'el';
        $_SESSION['lab_lang'] = $lang;
        if (! headers_sent()) {
            setcookie('lab_lang', $lang, [
                'expires' => time() + 86400 * 400,
                'path' => Helpers::basePath() === '' ? '/' : Helpers::basePath() . '/',
                'samesite' => 'Lax',
            ]);
        }
    }

    public static function lang(): string
    {
        $lang = (string) ($_SESSION['lab_lang'] ?? 'el');

        return $lang === 'en' ? 'en' : 'el';
    }

    public static function t(string $key): string
    {
        $all = self::catalog();
        $lang = self::lang();

        return $all[$lang][$key] ?? $all['el'][$key] ?? $key;
    }

    /** @return array<string, string> */
    public static function all(): array
    {
        return array_merge(self::catalog()['el'], self::catalog()[self::lang()] ?? []);
    }

    /** @return array<string, array<string, string>> */
    private static function catalog(): array
    {
        return [
            'el' => [
                'app' => 'Panorama Lab',
                'print_now' => 'Τύπωσε εδώ, τώρα',
                'online_order' => 'Online παραγγελία',
                'choose_lang' => 'Διάλεξε γλώσσα',
                'touch_lang' => 'Άγγιξε τη σημαία σου',
                'greek' => 'Ελληνικά',
                'english' => 'English',
                'staff' => 'Προσωπικό',
                'product_hello' => 'Τι θέλεις να φτιάξεις;',
                'product_prints' => 'Εκτύπωση φωτογραφιών',
                'product_prints_sub' => '10×15, 13×18, 20×30 και άλλες διαστάσεις.',
                'product_calendar' => 'Ημερολόγιο',
                'product_calendar_sub' => 'Διάλεξε πρότυπο και βάλε τη φωτογραφία σου.',
                'product_docs' => 'Ταυτότητα · διαβατήριο',
                'product_docs_sub' => 'Σημάδεψε κεφάλι και πηγούνι. 4 πορτρέτα σε 9×13 εκ.',
                'id_place' => 'Τοποθέτηση πορτρέτου',
                'id_place_ready' => 'Έτοιμο — 4 σε 9×13',
                'id_hint' => 'Πάτα μια φωτογραφία ή «Τοποθέτηση πορτρέτου»: πάνω κεφάλι, μετά πηγούνι, μετά zoom.',
                'cal_style_hello' => 'Διάλεξε πρότυπο ημερολογίου',
                'cal_wall' => 'Τοίχου · 1 σελίδα',
                'cal_wall_sub' => 'Μία φωτογραφία πάνω και όλοι οι μήνες του 2027 κάτω.',
                'cal_months' => 'Μηνιαίο · 12 σελίδες',
                'cal_months_sub' => 'Μεγάλη φωτογραφία και ημερολόγιο μήνα σε κάθε σελίδα.',
                'cal_classic' => 'Κλασικό · 12 σελίδες',
                'cal_classic_sub' => 'Κορνίζα, τίτλος μήνα και πλέγμα ημερών. Μία φωτό ανά μήνα.',
                'cal_place' => 'Τοποθέτηση στο ημερολόγιο',
                'cal_hint' => 'Τσέκαρε τις φωτογραφίες και πάτα «Τοποθέτηση στο ημερολόγιο».',
                'source_hello' => 'Πώς θα φορτώσεις τις φωτογραφίες;',
                'files' => 'Αρχείο',
                'files_sub' => 'Διάλεξε φωτογραφίες από τον υπολογιστή ή το κινητό.',
                'card' => 'Κάρτα',
                'card_sub' => 'USB ή κάρτα μνήμης — φορτώνει όλες τις φωτο.',
                'folder' => 'Φάκελος',
                'folder_sub' => 'Άνοιξε τον φάκελο DCIM της κάρτας.',
                'step_product' => '1. Είδος',
                'step_source' => '2. Φόρτωση',
                'step_gallery' => '3. Επιλογή',
                'step_checkout' => '4. Παραγγελία',
                'step_route' => '4. Εκτύπωση',
                'step_finish' => '5. Παραλαβή',
                'route_hello' => 'Εκτύπωση ή αρχειοθέτηση;',
                'route_print' => 'Εκτύπωση',
                'route_print_sub' => 'Στέλνει τις φωτογραφίες στον εκτυπωτή τώρα.',
                'route_archive' => 'Αρχειοθέτηση',
                'route_archive_sub' => 'Αποθηκεύει τις φωτογραφίες στον φάκελο για αργότερα.',
                'route_name' => 'Όνομα παραγγελίας (προαιρετικό)',
                'route_name_folder' => 'Το όνομα γράφεται και στον φάκελο όπου αποθηκεύονται οι φωτογραφίες.',
                'continue' => 'Συνέχεια',
                'to_order' => 'Προς παραγγελία',
                'place_order' => 'Ολοκλήρωση παραγγελίας',
                'cancel' => 'Ακύρωση',
                'back' => 'Πίσω',
                'no_qty' => 'χωρίς ποσότητα',
                'prints_n' => 'εκτυπώσεις',
                'copy' => 'Αντίγραφο',
                'delete' => 'Διαγραφή',
                'delete_photo' => 'Διαγραφή φωτογραφίας;',
                'check_photos' => 'Τσέκαρε τις φωτογραφίες που θέλεις (κουτάκι πάνω αριστερά).',
                'calendar_1' => 'Ημερολόγιο 2027 · 1 σελίδα',
                'calendar_12' => 'Ημερολόγιο 2027 · 12 σελίδες',
            ],
            'en' => [
                'app' => 'Panorama Lab',
                'print_now' => 'Print here, now',
                'online_order' => 'Online order',
                'choose_lang' => 'Choose your language',
                'touch_lang' => 'Touch your flag to start',
                'greek' => 'Ελληνικά',
                'english' => 'English',
                'staff' => 'Staff',
                'product_hello' => 'What would you like to make?',
                'product_prints' => 'Photo prints',
                'product_prints_sub' => '10×15, 13×18, 20×30 and more sizes.',
                'product_calendar' => 'Calendar',
                'product_calendar_sub' => 'Pick a template and place your photo on it.',
                'product_docs' => 'ID · passport photos',
                'product_docs_sub' => 'Tap crown then chin. Four portraits on 9×13 cm.',
                'id_place' => 'Place portrait',
                'id_place_ready' => 'Ready — 4 on 9×13',
                'id_hint' => 'Tap a photo or Place portrait: crown, then chin, then zoom.',
                'cal_style_hello' => 'Choose a calendar template',
                'cal_wall' => 'Wall · 1 page',
                'cal_wall_sub' => 'One photo on top, all 2027 months below.',
                'cal_months' => 'Monthly · 12 pages',
                'cal_months_sub' => 'A large photo and that month’s dates on each page.',
                'cal_classic' => 'Classic · 12 pages',
                'cal_classic_sub' => 'Framed photo, month title and date grid. One photo per month.',
                'cal_place' => 'Place on calendar',
                'cal_hint' => 'Tick the photos, then tap “Place on calendar”.',
                'source_hello' => 'How do you want to load photos?',
                'files' => 'Files',
                'files_sub' => 'Pick photos from this computer or phone.',
                'card' => 'Card',
                'card_sub' => 'USB stick or memory card — loads every photo.',
                'folder' => 'Folder',
                'folder_sub' => 'Open the DCIM folder on the card.',
                'step_product' => '1. Type',
                'step_source' => '2. Load',
                'step_gallery' => '3. Choose',
                'step_checkout' => '4. Order',
                'step_route' => '4. Print',
                'step_finish' => '5. Pickup',
                'route_hello' => 'Print now or archive?',
                'route_print' => 'Print',
                'route_print_sub' => 'Send the photos to the printer now.',
                'route_archive' => 'Archive',
                'route_archive_sub' => 'Save the photos to the folder for later.',
                'route_name' => 'Order name (optional)',
                'route_name_folder' => 'The name is also used for the folder where photos are saved.',
                'continue' => 'Continue',
                'to_order' => 'Go to order',
                'place_order' => 'Place order',
                'cancel' => 'Cancel',
                'back' => 'Back',
                'no_qty' => 'no quantity',
                'prints_n' => 'prints',
                'copy' => 'Copy',
                'delete' => 'Delete',
                'delete_photo' => 'Delete this photo?',
                'check_photos' => 'Tick the photos you want (checkbox, top left).',
                'calendar_1' => '2027 calendar · 1 page',
                'calendar_12' => '2027 calendar · 12 pages',
            ],
        ];
    }
}
