<?php
/** @noinspection PhpUnused */

namespace Fhp\Segment\KAA;

use Fhp\Segment\BaseSegment;
use Fhp\Syntax\Bin;

/**
 * Segment: Kontoauszug aus Archiv Rückmeldung (Version 2)
 *
 * Enthält die Kontoauszugsdaten (PDF oder anderes Format) sowie Metadaten.
 */
class HIKAAv2 extends BaseSegment implements HIKAA
{
    /**
     * Format des Kontoauszugs
     * 1 = MT940, 2 = ISO 8583, 3 = PDF/A, 4 = PDF
     */
    public ?int $format = null;

    /** Kontoauszugsdaten (binär - PDF oder anderes Format) */
    public Bin $kontoauszugsdaten;

    /** Berichtszeitraum - von Datum (JJJJMMTT) */
    public ?string $vonDatum = null;

    /** Berichtszeitraum - bis Datum (JJJJMMTT) */
    public ?string $bisDatum = null;

    /** Erstellungsdatum des Kontoauszugs (JJJJMMTT) */
    public ?string $erstellungsdatum = null;

    /** Jahr des Kontoauszugs */
    public ?int $kontoauszugsjahr = null;

    /** Nummer des Kontoauszugs */
    public ?int $kontoauszugsnummer = null;

    /** IBAN des Kontos */
    public ?string $iban = null;

    /** BIC des Kontos */
    public ?string $bic = null;

    /** Kontobezeichnung (max 35 Zeichen) */
    public ?string $kontobezeichnung = null;

    /** Dateiname (max 256 Zeichen) */
    public ?string $dateiname = null;

    /** Quittungscode (binär) - für Quittierungspflicht */
    public ?Bin $quittungscode = null;

    public function getPdfData(): string
    {
        return $this->kontoauszugsdaten->getData();
    }

    public function getStatementNumber(): ?int
    {
        return $this->kontoauszugsnummer;
    }

    public function getStatementYear(): ?int
    {
        return $this->kontoauszugsjahr;
    }

    public function getIban(): ?string
    {
        return $this->iban;
    }

    public function getFilename(): ?string
    {
        return $this->dateiname;
    }

    public function getFormat(): ?int
    {
        return $this->format;
    }

    public function getCreationDate(): ?\DateTime
    {
        if ($this->erstellungsdatum === null) {
            return null;
        }
        return \DateTime::createFromFormat('Ymd', $this->erstellungsdatum) ?: null;
    }

    public function needsReceipt(): bool
    {
        return $this->quittungscode !== null;
    }

    public function getReceiptCode(): ?string
    {
        return $this->quittungscode?->getData();
    }
}
