<?php
/** @noinspection PhpUnused */

namespace Fhp\Segment\KAA;

use Fhp\Segment\BaseSegment;
use Fhp\Segment\Paginateable;

/**
 * Segment: Kontoauszug aus Archiv anfordern (Version 2)
 *
 * Dieser Geschäftsvorfall dient zum Abruf von Kontoauszügen aus dem Bankarchiv/Postfach.
 * Unterstützt verschiedene Formate, insbesondere PDF (Format-Code 4).
 *
 * @link https://www.hbci-zka.de/dokumente/spezifikation_deutsch/fintsv3/FinTS_3.0_Messages_Geschaeftsvorfaelle_2015-08-07_final_version.pdf
 */
class HKKAAv2 extends BaseSegment implements Paginateable
{
    /** Kontoverbindung international (IBAN/BIC) */
    public \Fhp\Segment\Common\Kti $kontoverbindungInternational;

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

    /**
     * Von Datum (JJJJMMTT) - Optional
     * Beginn des Zeitraums für Kontoauszüge
     */
    public ?string $vonDatum = null;

    /**
     * Bis Datum (JJJJMMTT) - Optional
     * Ende des Zeitraums für Kontoauszüge
     */
    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 Segment für den Abruf von Kontoauszügen aus dem Archiv
     *
     * @param \Fhp\Segment\Common\Kti $kti Kontoverbindung
     * @param int $format Format (4 = PDF)
     * @param string|null $vonDatum Optional: Start-Datum JJJJMMTT
     * @param string|null $bisDatum Optional: End-Datum JJJJMMTT
     * @param string|null $aufsetzpunkt Optional: Pagination Token
     * @return HKKAAv2
     */
    public static function create(
        \Fhp\Segment\Common\Kti $kti,
        int $format = 4,
        ?string $vonDatum = null,
        ?string $bisDatum = null,
        ?string $aufsetzpunkt = null
    ): HKKAAv2 {
        $result = HKKAAv2::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;
    }
}
