use serde::{Deserialize, Serialize};

use crate::TZnakowy;

/// Pozostałe dane na fakturze - informacja (Informacje).
///
/// Pozostałe dane. maxOccurs="3".
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Informacja {
    /// Stopka faktury (StopkaFaktury).
    ///
    /// TTekstowy. minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub stopka_faktury: Option<TZnakowy>,
}

/// Numery w rejestrach i bazach danych (Rejestry).
///
/// Numery podmiotu lub grupy podmiotów w innych rejestrach i bazach danych.
/// maxOccurs="100".
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Rejestr {
    /// Pełna nazwa (PelnaNazwa).
    ///
    /// minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pelna_nazwa: Option<TZnakowy>,
    /// Numer KRS (KRS).
    ///
    /// TNrKRS. minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub krs: Option<TZnakowy>,
    /// Numer REGON (REGON).
    ///
    /// TNrREGON. minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub regon: Option<TZnakowy>,
    /// Numer BDO (BDO).
    ///
    /// maxLength="9". minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub bdo: Option<TZnakowy>,
}

/// Pozostałe dane na fakturze (Stopka).
///
/// Sekcja Stopka. minOccurs="0".
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Stopka {
    /// Pozostałe dane (Informacje).
    ///
    /// maxOccurs="3". minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub informacje: Option<Vec<Informacja>>,
    /// Numery w rejestrach (Rejestry).
    ///
    /// maxOccurs="100". minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub rejestry: Option<Vec<Rejestr>>,
}
