<?php

namespace App\EventPaymentModules\Modules;

use App\EventPaymentModules\AbstractEventPaymentModule;
use App\EventPaymentModules\DTO\CreateInvoiceRequest;
use App\EventPaymentModules\DTO\RegistrationRenderContext;
use App\EventPaymentModules\DTO\RegistrationSummaryRequest;
use App\EventPaymentModules\DTO\RegistrationSummaryResponse;
use App\Models\PaymentMethod;

/**
 * Sonstiges (Barzahlung, Zahlung vor Ort) -- die anzuzeigende Zahlungsinformation ist nutzerdefiniert
 * (mehrzeiliger Freitext) und wird als Option gepflegt.
 */
class UndefinedPaymentModule extends AbstractEventPaymentModule
{
    public static function slug(): string
    {
        return PaymentMethod::PAYMENT_NOT_DEFINED;
    }

    public function defaultName(): string
    {
        return 'Sonstiges (Barzahlung, Zahlung vor Ort)';
    }

    public function defaultConfiguration(): array
    {
        return ['icon' => 'coins'];
    }

    public function getOptions(): array
    {
        return [
            ['name' => 'payment_information', 'label' => 'Zahlungsinformationen', 'type' => 'richtext', 'required' => true, 'hint' => 'Dieser Text wird der teilnehmenden Person am Ende der Anmeldung und in der Bestätigungs-E-Mail angezeigt.'],
            ['name' => 'icon', 'label' => 'Symbol', 'type' => 'icon', 'required' => false],
        ];
    }

    public function registrationSummary(RegistrationSummaryRequest $request): RegistrationSummaryResponse
    {
        $paymentInformation = (string)($request->configuration['payment_information'] ?? '');

        $response = new RegistrationSummaryResponse();
        $response->hasPaymentInformation = trim($paymentInformation) !== '';

        if ($response->hasPaymentInformation) {
            // Medien-gerechtes Template je Render-Kontext (Web: SPA, Mail: E-Mail-tauglich).
            $view = $request->context === RegistrationRenderContext::Mail
                ? 'payment-modules.undefined.mail'
                : 'payment-modules.undefined.web';

            $response->html = view($view, ['paymentInformation' => $paymentInformation])->render();
        }

        return $response;
    }

    protected function invoiceClosingStatement(CreateInvoiceRequest $request): string
    {
        return '';
    }
}
