<?php

declare(strict_types=1);

namespace App\Services;

final class DocumentGenerator
{
    public function generate(string $type, array $payload): array
    {
        $date = date('d.m.Y');
        $institution = trim((string) ($payload['institution'] ?? 'Компетентната институция'));
        $description = trim((string) ($payload['description'] ?? $payload['requested_information'] ?? ''));
        $address = trim((string) ($payload['address'] ?? ''));

        $title = match ($type) {
            'zdoi' => 'ЗАЯВЛЕНИЕ ПО ЗДОИ',
            'petition' => 'ПЕТИЦИЯ',
            'appeal' => 'ЖАЛБА',
            default => 'СИГНАЛ',
        };

        $body = match ($type) {
            'zdoi' => "До: {$institution}\n\n{$title}\n\nМоля да ми бъде предоставена следната обществена информация:\n{$description}\n\nЖелая информацията да бъде предоставена по електронен път. Моля да бъда уведомен в срока по закон.\n\nДата: {$date}\nПодпис: ............",
            'petition' => "{$title}\n\n" . ($payload['title'] ?? 'Гражданска инициатива') . "\n\nНие, долуподписаните граждани, настояваме:\n{$description}\n\nЦели:\n" . ($payload['goals'] ?? 'Да бъдат предприети конкретни действия и да бъде публикуван срок за изпълнение.') . "\n\nДата: {$date}",
            'appeal' => "До: {$institution}\n\n{$title}\n\nОбжалвам липсата на действие/отговор по следния случай:\n{$description}\n\nМоля за проверка и произнасяне по компетентност.\n\nДата: {$date}\nПодпис: ............",
            default => "До: {$institution}\n\n{$title}\n\nУважаеми госпожи и господа,\n\nПодавам настоящия сигнал относно следния проблем:\n{$description}\n\nМестоположение: {$address}\n\nМоля да бъде извършена проверка и да бъдат предприети необходимите действия. Моля да бъда уведомен за резултата в законоустановения срок.\n\nДата: {$date}\nПодпис: ............",
        };

        return [
            'title' => $title,
            'text' => $body,
            'html' => nl2br(e($body)),
            'email_subject' => $title . ' - CiviGO.eu',
        ];
    }
}
