use serde::{Deserialize, Serialize};

use crate::{TRolaPodmiotuUpowaznionego, TZnakowy20};

use super::common::{DaneIdentyfikacyjnePodmiot1, DaneKontaktowe, TAdres};

/// Dane podmiotu upoważnionego (PodmiotUpowazniony).
///
/// Dane podmiotu upoważnionego, związanego z fakturą.
/// minOccurs="0".
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PodmiotUpowaznionyInfo {
    /// Numer EORI podmiotu upoważnionego (NrEORI).
    ///
    /// minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub nr_eori: Option<TZnakowy20>,
    /// Dane identyfikujące podmiot upoważniony (DaneIdentyfikacyjne).
    ///
    /// Typ TPodmiot1.
    pub dane_identyfikacyjne: DaneIdentyfikacyjnePodmiot1,
    /// Adres podmiotu upoważnionego (Adres).
    ///
    /// Typ TAdres.
    pub adres: TAdres,
    /// Adres korespondencyjny podmiotu upoważnionego (AdresKoresp).
    ///
    /// Typ TAdres. minOccurs="0".
    #[serde(skip_serializing_if = "Option::is_none")]
    pub adres_koresp: Option<TAdres>,
    /// Dane kontaktowe podmiotu upoważnionego (DaneKontaktowe).
    ///
    /// minOccurs="0", maxOccurs="3".
    /// Pola: EmailPU (adres e-mail), TelefonPU (numer telefonu).
    #[serde(skip_serializing_if = "Option::is_none")]
    pub dane_kontaktowe: Option<Vec<DaneKontaktowe>>,
    /// Rola podmiotu upoważnionego (RolaPU).
    ///
    /// TRolaPodmiotuUpowaznionego: 1=Organ egzekucyjny (art. 106c pkt 1),
    /// 2=Komornik sądowy (art. 106c pkt 2), 3=Przedstawiciel podatkowy (art. 18a-18d).
    pub rola_pu: TRolaPodmiotuUpowaznionego,
}
