<?php

declare(strict_types=1);

namespace App\Modules\Content\Application;

use App\Modules\Content\Domain\Announcement;
use App\Modules\Content\Domain\FaqItem;

class ContentService
{
    /**
     * @return array<int, Announcement>
     */
    public function activeAnnouncements(string $tenantId): array
    {
        return [
            new Announcement(
                id: 'announcement-demo-1',
                tenantId: $tenantId,
                title: 'Willkommen',
                message: 'Das Content-Modul liefert spaeter Hinweise und tenantbezogene Meldungen.',
                visibleUntil: '2026-12-31 23:59:59',
                active: true,
            ),
        ];
    }

    /**
     * @return array<string, mixed>
     */
    public function publicOverview(string $tenantId): array
    {
        $announcements = array_map(
            static fn (Announcement $announcement): array => $announcement->toArray(),
            $this->activeAnnouncements($tenantId)
        );

        $faq = array_map(
            static fn (FaqItem $faqItem): array => $faqItem->toArray(),
            $this->faqItems($tenantId)
        );

        return [
            'announcements' => $announcements,
            'faq' => $faq,
            'policy' => [
                'template_policy' => 'Standardvorlage plus Tenant-Override',
                'visibility_policy' => 'Freigegebene Inhalte fuer Mitglieder und Dashboard sichtbar',
                'admin_scope' => 'Tenant-Admins pflegen Inhalte direkt im Mandantenkontext',
            ],
            'workflow' => [
                'Draft',
                'Review',
                'Publish',
                'Expire',
            ],
            'summary' => [
                'announcement_count' => count($announcements),
                'faq_count' => count($faq),
            ],
        ];
    }

    /**
     * @return array<string, mixed>
     */
    public function editorialOverview(string $tenantId): array
    {
        return [
            'tenant_id' => $tenantId,
            'sections' => [
                [
                    'title' => 'Hinweise',
                    'description' => 'Tenant-Admins pflegen zeitlich begrenzte Hinweise mit klarer Sichtbarkeit.',
                ],
                [
                    'title' => 'FAQ',
                    'description' => 'Fragen und Antworten bilden die Standardvorlage, die je Tenant uebersteuert werden kann.',
                ],
                [
                    'title' => 'Redaktionsablauf',
                    'description' => 'Entwurf, Sichtung, Freigabe und Ablauf sind als klarer Content-Workflow gedacht.',
                ],
            ],
            'rules' => [
                'Standardvorlage + Tenant-Override',
                'Tenant-Admins verwalten Inhalte selbst',
                'Veroeffentlichung steuert Sichtbarkeit auf Dashboard und spaetere Kanaele',
            ],
            'editable_items' => [
                'announcement' => array_map(
                    static fn (Announcement $announcement): array => $announcement->toArray(),
                    $this->activeAnnouncements($tenantId)
                ),
                'faq' => array_map(
                    static fn (FaqItem $faqItem): array => $faqItem->toArray(),
                    $this->faqItems($tenantId)
                ),
            ],
        ];
    }

    /**
     * @return array<int, FaqItem>
     */
    public function faqItems(string $tenantId): array
    {
        return [
            new FaqItem(
                id: 'faq-demo-1',
                tenantId: $tenantId,
                question: 'Wie werden Hinweise gepflegt?',
                answer: 'Spaeter ueber den Tenant-Adminbereich mit tenantbezogener Sichtbarkeit.',
                sortOrder: 10,
                active: true,
            ),
        ];
    }
}
