export module Grain {
    export type SimulationCommunaute = {
        puissance: number
        economies?: number
        autoconso: number
        autoprod: number
        fraisDivers: number
        prix: number
        apport: number
        interet: number
        echeances: number
        consoMoyenneFoyer: number
        productible: number
        degradation: number
        inflation: number
        ratio: number
        enedis: number
        tarifCRE: {
            limites: number[]
            prix: number[]
            inflation: number
        }
        coutElec: number
        inflationElec: number
        maintenance: number
        turpe: number
        turpeInjection: number
        provisionOnduleurs: number
        assurance: number
        divers: number
        ratioDcAc: number
        dureeAmortissement: number
        tauxIS: number
        tauxDSRA: number
    }

    export function newSimulationCommunaute(): SimulationCommunaute {
        return {
            puissance: 0,
            autoconso: 90,
            autoprod: 10,
            fraisDivers: 1000,
            prix: 0.13,
            apport: 10000,
            interet: 4.5,
            echeances: 96,
            consoMoyenneFoyer: 2500, //Kwh/an
            productible: 1100,
            degradation: 0.6,
            inflation: 1,
            ratio: 1.1, // €/Wc
            enedis: 1500,
            tarifCRE: {
                limites: [0, 9, 100],
                prix: [0.1339, 0.0803, 0.1312],
                inflation: 1,
            },
            coutElec: 0.24, // €
            inflationElec: 12, // %
            maintenance: 7, // €/kWc
            turpe: 16, // €/kWc
            turpeInjection: 0.0278,
            provisionOnduleurs: 0.1, // €/Wc
            assurance: 1, // % des travaux estimé entre 0.5% et 0.8%
            divers: 12,
            ratioDcAc: 0.8,
            dureeAmortissement: 10, // durée fiscale en années
            tauxIS: 25,
            tauxDSRA: 1.7, // %
        }
    }

    export type ListProjets = { ListProjets: null }
    export type ListProjetsResp = {
        id: string
        nom: string
        puissance: number
        t: number
    }[]

    export type CreateProjet = {
        CreateProjet: {
            nom?: string
            porteur?: string
            tel?: string
            adresse?: string
            centrales: Centrale[]
            simulation?: SimulationCommunaute
            prms: Prm[]
        }
    }

    export type Centrale = {
        position?: { lat: number; lng: number }
        azimuth?: number
        inclinaison?: number
    }

    export type CreateProjetResp = null | string

    export type SaveProjet = {
        SaveProjet: {
            id: string
            nom?: string
            porteur?: string
            tel?: string
            adresse?: string
            position?: { lat: number; lng: number }
            azimuth?: number
            inclinaison?: number
            simulation?: SimulationCommunaute
            prms: Prm[]
            centrales: Centrale[]
        }
    }

    export type Prm = { prm: number | null; nom: string; prenom: string }

    export type GetProjet = { GetProjet: string }
    export type GetProjetResp = null | {
        id: string
        nom?: string
        porteur?: string
        tel?: string
        adresse?: string
        position?: { lat: number; lng: number }
        azimuth?: number
        inclinaison?: number
        simulation?: SimulationCommunaute
        img?: string
    }

    export type DelProjet = {
        DelProjet: {
            id: string
        }
    }

    export type Cmd =
        | ListProjets
        | CreateProjet
        | SaveProjet
        | DelProjet
        | GetProjet
}