<?php
/** @noinspection PhpUnused */

namespace Fhp\Segment\KAA;

use Fhp\Segment\BaseSegment;
use Fhp\Segment\Common\Kti;
use Fhp\Segment\Paginateable;

/**
 * Segment: Kontoauszug aus Archiv anfordern (Version 1)
 *
 * Dieser Geschäftsvorfall dient zum Abruf von Kontoauszügen aus dem Bankarchiv/Postfach.
 * Diese Bank (VR) erwartet Kti (IBAN/BIC) auch für Version 1.
 *
 * Feld-Reihenfolge:
 * 1. Kontoverbindung international (Kti: IBAN + BIC)
 * 2. Format (optional)
 * 3. Von-Datum (optional)
 * 4. Bis-Datum (optional)
 * 5. Maximale Anzahl Einträge (optional)
 * 6. Aufsetzpunkt (optional)
 */
class HKKAAv1 extends BaseSegment implements Paginateable
{
    /** Kontoverbindung international (Kti: IBAN + BIC) */
    public Kti $kontoverbindungInternational;

    /**
     * Format des Kontoauszugs
     * 1 = MT940 (SWIFT)
     * 2 = ISO 8583
     * 3 = PDF/A
     * 4 = PDF
     */
    public ?int $format = null;

    /**
     * Von Datum (JJJJMMTT) - Optional
     */
    public ?string $vonDatum = null;

    /**
     * Bis Datum (JJJJMMTT) - Optional
     */
    public ?string $bisDatum = null;

    /**
     * Maximale Anzahl Einträge - Optional
     */
    public ?int $maximaleAnzahlEintraege = null;

    /**
     * Aufsetzpunkt für Pagination - Max 35 Zeichen
     */
    public ?string $aufsetzpunkt = null;

    /**
     * Erstellt ein HKKAA v1 Segment für Zeitraum-Abruf
     */
    public static function create(
        Kti $kti,
        int $format = 4,
        ?string $vonDatum = null,
        ?string $bisDatum = null,
        ?string $aufsetzpunkt = null
    ): HKKAAv1 {
        $result = HKKAAv1::createEmpty();
        $result->kontoverbindungInternational = $kti;
        $result->format = $format;
        $result->vonDatum = $vonDatum;
        $result->bisDatum = $bisDatum;
        $result->aufsetzpunkt = $aufsetzpunkt;
        return $result;
    }

    public function setPaginationToken(string $paginationToken): void
    {
        $this->aufsetzpunkt = $paginationToken;
    }
}
