<?php

declare(strict_types=1);

namespace App\Shared\Support;

use App\Core\Url;

final class PrintSupport
{
    public static function formatChooser(string $a4Url, string $receiptUrl = '', string $title = 'اختر نوع الطباعة', string $preferredFormat = 'a4'): void
    {
        $a4Url = self::normalizeUrl($a4Url);
        $receiptUrl = self::normalizeUrl($receiptUrl);
        if (!headers_sent()) {
            header('Content-Type: text/html; charset=utf-8');
        }

        $title = trim($title);
        if ($title === '') {
            $title = 'اختر نوع الطباعة';
        }

        $preferredFormat = strtolower(trim($preferredFormat));
        if (!in_array($preferredFormat, ['a4', 'receipt'], true)) {
            $preferredFormat = 'a4';
        }

        $buttons = [
            ['format' => 'a4', 'label' => 'طباعة A4', 'url' => $a4Url, 'enabled' => $a4Url !== '#'],
            ['format' => 'receipt', 'label' => 'طباعة إيصال 80 مم', 'url' => $receiptUrl, 'enabled' => $receiptUrl !== '' && $receiptUrl !== '#'],
        ];
        usort($buttons, static function (array $a, array $b) use ($preferredFormat): int {
            if ($a['format'] === $b['format']) {
                return 0;
            }
            if ($a['format'] === $preferredFormat) {
                return -1;
            }
            if ($b['format'] === $preferredFormat) {
                return 1;
            }
            return 0;
        });

        echo '<!doctype html><html lang="ar" dir="rtl"><head>';
        echo '<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">';
        echo '<title>' . Html::escape($title) . '</title>';
        echo '<style>';
        echo 'body{font-family:system-ui,-apple-system,"Segoe UI",Tahoma,Arial; background:#f6f7fb; margin:0; padding:24px;}';
        echo '.wrap{max-width:640px;margin:0 auto;background:#fff;border:1px solid #e5e7eb;border-radius:16px;padding:20px;box-shadow:0 10px 30px rgba(0,0,0,.05);}';
        echo 'h1{margin:0 0 14px 0;font-size:20px;text-align:center;}';
        echo '.btns{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-top:14px;}';
        echo 'a.btn{display:block;text-decoration:none;text-align:center;padding:14px 10px;border-radius:12px;border:1px solid #dbe2ea;font-weight:800;color:#111;background:#f9fafb;position:relative;}';
        echo 'a.btn:hover{background:#eef2ff;border-color:#c7d2fe;}';
        echo '.badge{display:inline-block;margin-inline-start:8px;padding:3px 8px;border-radius:999px;background:#eef2ff;color:#3730a3;font-size:12px;font-weight:800;}';
        echo '.hint{margin-top:12px;color:#6b7280;font-size:13px;text-align:center}';
        echo '</style></head><body>';
        echo '<div class="wrap">';
        echo '<h1>' . Html::escape($title) . '</h1>';
        echo '<div class="btns">';
        foreach ($buttons as $button) {
            if (!$button['enabled']) {
                continue;
            }
            echo '<a class="btn" href="' . Html::escape($button['url']) . '">' . Html::escape($button['label']);
            if ($button['format'] === $preferredFormat) {
                echo '<span class="badge">الافتراضي</span>';
            }
            echo '</a>';
        }
        echo '</div>';
        echo '<div class="hint">اختيار القالب يتم من إعدادات الطباعة فقط، أما هذه الشاشة فهي لاختيار المقاس. ويمكنك أيضاً فتح الرابط مباشرة بإضافة <b>?format=a4</b> أو <b>?format=receipt</b>.</div>'; 
        echo '</div></body></html>';
    }

    private static function normalizeUrl(string $path): string
    {
        $path = trim($path);
        if ($path === '') {
            return '#';
        }

        if (preg_match('~^(?:https?:)?//~i', $path) || str_starts_with($path, 'mailto:')) {
            return $path;
        }

        $base = Url::baseUri();
        if ($base !== '' && ($path === $base || str_starts_with($path, $base . '/'))) {
            return $path;
        }

        if (str_starts_with($path, '/')) {
            return Url::to($path);
        }

        return Url::to('/' . ltrim($path, '/'));
    }
}
