'''4. Revenus fonciers.'''


from openfisca_tunisia.variables.base import *  # noqa analysis:ignore


class revenus_fonciers(Variable):
    value_type = float
    entity = FoyerFiscal
    label = 'Revenus fonciers'
    definition_period = YEAR

    def formula(foyer_fiscal, period):
        foncier_reel_resultat_fiscal = foyer_fiscal.declarant_principal('foncier_reel_resultat_fiscal', period = period)
        foncier_forfait_bati_resultat_fiscal = foyer_fiscal('foncier_forfait_bati_resultat_fiscal', period = period)
        foncier_forfait_non_bati_resultat_fiscal = foyer_fiscal('foncier_forfait_non_bati_resultat_fiscal', period = period)
        foncier_societes_personnes = foyer_fiscal.declarant_principal('foncier_societes_personnes', period = period)

        return foncier_reel_resultat_fiscal + foncier_forfait_bati_resultat_fiscal + foncier_forfait_non_bati_resultat_fiscal + foncier_societes_personnes


class foncier_forfait_bati_resultat_fiscal(Variable):
    value_type = float
    entity = FoyerFiscal
    label = 'Revenus fonciers net des immeubles bâtis'
    definition_period = YEAR

    def formula(foyer_fiscal, period, parameters):
        foncier_forfaitaire_batis_recettes = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_batis_recettes', period = period)
        # foncier_forfaitaire_batis_reliquat = foyer_fiscal.declarant_principal(
        #     'foncier_forfaitaire_batis_reliquat', period = period)
        foncier_forfaitaire_batis_frais = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_batis_frais', period = period)
        foncier_forfaitaire_batis_taxe = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_batis_taxe', period = period)
        taux_deduction_frais = parameters(period.start).impot_revenu.foncier.bati.deduction_frais
        return max_(
            0,
            foncier_forfaitaire_batis_recettes * (1 - taux_deduction_frais)
            - foncier_forfaitaire_batis_frais
            - foncier_forfaitaire_batis_taxe
            )


class foncier_forfait_non_bati_resultat_fiscal(Variable):
    value_type = float
    entity = FoyerFiscal
    label = 'Revenus fonciers net des terrains non bâtis'
    definition_period = YEAR

    def formula(foyer_fiscal, period):
        foncier_forfaitaire_non_batis_recettes = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_non_batis_recettes', period = period)
        foncier_forfaitaire_non_batis_depenses = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_non_batis_depenses', period = period)
        foncier_forfaitaire_non_batis_taxe = foyer_fiscal.declarant_principal(
            'foncier_forfaitaire_non_batis_taxe', period = period)
        return max_(
            foncier_forfaitaire_non_batis_recettes - foncier_forfaitaire_non_batis_depenses - foncier_forfaitaire_non_batis_taxe,
            0
            )
