require 'money_s3/parsers/base_parser'
require 'money_s3/parsers/doklad_firma_type'
require 'money_s3/parsers/valuty'
require 'money_s3/parsers/ucet'
require 'money_s3/parsers/vlajky'
require 'money_s3/parsers/souhrn_dph_type'
require 'money_s3/parsers/norm_poloz_ud_type'
require 'money_s3/parsers/rozuct_poloz_ud_type'

module MoneyS3
  module Parsers
    class BankDokl
      include BaseParser

      def vydej
        at 'Vydej'
      end

      def doklad
        at 'Doklad'
      end

      def ev_cis_dokl
        at 'EvCisDokl'
      end

      def zpusob_uctovani
        at 'ZpusobUctovani'
      end

      def popis
        at 'Popis'
      end

      def dat_uc_pr
        at 'DatUcPr'
      end

      def dat_vyst
        at 'DatVyst'
      end

      def dat_plat
        at 'DatPlat'
      end

      def dat_pln
        at 'DatPln'
      end

      def dat_upl_dph
        at 'DatUplDPH'
      end

      def vypis
        at 'Vypis'
      end

      def id_polozky
        at 'IDPolozky'
      end

      def ad_ucet
        at 'AdUcet'
      end

      def ad_kod
        at 'AdKod'
      end

      def prijat_dokl
        at 'PrijatDokl'
      end

      def var_sym
        at 'VarSym'
      end

      def par_sym
        at 'ParSym'
      end

      def kon_sym
        at 'KonSym'
      end

      def spec_sym
        at 'SpecSym'
      end

      def pr_kont
        at 'PrKont'
      end

      def cleneni
        at 'Cleneni'
      end

      def stred
        at 'Stred'
      end

      def zakazka
        at 'Zakazka'
      end

      def cinnost
        at 'Cinnost'
      end

      def stat_moss
        at 'StatMOSS'
      end

      def s_sazba
        at 'SSazba'
      end

      def z_sazba
        at 'ZSazba'
      end

      def pozn
        at 'Pozn'
      end

      def d_rada
        at 'DRada'
      end

      def d_cislo
        at 'DCislo'
      end

      def vyst
        at 'Vyst'
      end

      def typ_dokl
        at 'TypDokl'
      end

      def celkem
        at 'Celkem'
      end

      def adresa
        submodel_at(DokladFirmaType, 'Adresa')
      end

      def valuty
        submodel_at(Valuty, 'Valuty')
      end

      def ucet
        submodel_at(Ucet, 'Ucet')
      end

      def vlajky
        submodel_at(Vlajky, 'Vlajky')
      end

      def souhrn_dph
        submodel_at(SouhrnDPHType, 'SouhrnDPH')
      end

      def seznam_norm_polozek
        array_of_at(NormPolozUDType, ['SeznamNormPolozek', 'NormPolozka'])
      end

      def seznam_rozuct_polozek
        array_of_at(RozuctPolozUDType, ['SeznamRozuctPolozek', 'RozuctPolozka'])
      end

      def dokumenty
        array_of_at(String, ['Dokumenty', 'Dokument'])
      end

      def to_h_with_attrs
        hash = HashWithAttributes.new({}, attributes)

        hash[:vydej] = vydej if has? 'Vydej'
        hash[:doklad] = doklad if has? 'Doklad'
        hash[:ev_cis_dokl] = ev_cis_dokl if has? 'EvCisDokl'
        hash[:zpusob_uctovani] = zpusob_uctovani if has? 'ZpusobUctovani'
        hash[:popis] = popis if has? 'Popis'
        hash[:dat_uc_pr] = dat_uc_pr if has? 'DatUcPr'
        hash[:dat_vyst] = dat_vyst if has? 'DatVyst'
        hash[:dat_plat] = dat_plat if has? 'DatPlat'
        hash[:dat_pln] = dat_pln if has? 'DatPln'
        hash[:dat_upl_dph] = dat_upl_dph if has? 'DatUplDPH'
        hash[:vypis] = vypis if has? 'Vypis'
        hash[:id_polozky] = id_polozky if has? 'IDPolozky'
        hash[:ad_ucet] = ad_ucet if has? 'AdUcet'
        hash[:ad_kod] = ad_kod if has? 'AdKod'
        hash[:prijat_dokl] = prijat_dokl if has? 'PrijatDokl'
        hash[:var_sym] = var_sym if has? 'VarSym'
        hash[:par_sym] = par_sym if has? 'ParSym'
        hash[:kon_sym] = kon_sym if has? 'KonSym'
        hash[:spec_sym] = spec_sym if has? 'SpecSym'
        hash[:pr_kont] = pr_kont if has? 'PrKont'
        hash[:cleneni] = cleneni if has? 'Cleneni'
        hash[:stred] = stred if has? 'Stred'
        hash[:zakazka] = zakazka if has? 'Zakazka'
        hash[:cinnost] = cinnost if has? 'Cinnost'
        hash[:stat_moss] = stat_moss if has? 'StatMOSS'
        hash[:s_sazba] = s_sazba if has? 'SSazba'
        hash[:z_sazba] = z_sazba if has? 'ZSazba'
        hash[:pozn] = pozn if has? 'Pozn'
        hash[:d_rada] = d_rada if has? 'DRada'
        hash[:d_cislo] = d_cislo if has? 'DCislo'
        hash[:vyst] = vyst if has? 'Vyst'
        hash[:typ_dokl] = typ_dokl if has? 'TypDokl'
        hash[:celkem] = celkem if has? 'Celkem'
        hash[:adresa] = adresa.to_h_with_attrs if has? 'Adresa'
        hash[:valuty] = valuty.to_h_with_attrs if has? 'Valuty'
        hash[:ucet] = ucet.to_h_with_attrs if has? 'Ucet'
        hash[:vlajky] = vlajky.to_h_with_attrs if has? 'Vlajky'
        hash[:souhrn_dph] = souhrn_dph.to_h_with_attrs if has? 'SouhrnDPH'
        hash[:seznam_norm_polozek] = seznam_norm_polozek.map(&:to_h_with_attrs) if has? 'SeznamNormPolozek'
        hash[:seznam_rozuct_polozek] = seznam_rozuct_polozek.map(&:to_h_with_attrs) if has? 'SeznamRozuctPolozek'
        hash[:dokumenty] = dokumenty if has? 'Dokumenty'

        hash
      end
    end
  end
end