<script lang="ts">
    import { getContext } from 'svelte'
    import type { Derived } from '../calcul'
    import Question from '../../../../Question.svelte'
    const d: Derived = getContext('simulation')

    const fmt2 = Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 })

    function sum(x: number[], n: number) {
        let sum = 0
        for (let i = 0; i < n; i++) {
            sum += x[i]
        }
        return sum
    }

    function format(x: number) {
        let f = 0
        let s = ''
        if (Math.abs(x) <= 1000) {
            s = ' €'
            f = x
        } else if (Math.abs(x) < 1000000) {
            s = ' k€'
            f = x / 1000
        } else if (Math.abs(x) < 1000000000) {
            s = ' M€'
            f = x / 1000000
        } else {
            s = ' mds€'
            f = x / 1000000000
        }
        return fmt2.format(f) + s
    }

    const N = d.N
    const resultatNet = d.resultatNet
    const chiffreAffaires = d.chiffreAffaires
    const arr = 0
    const autoprod = d.p.autoprod
    const autoconso = d.p.autoconso
    const productionAnnuelle = d.productionAnnuelle
    const tarifAllo = d.tarifAllo
    const tarifLocal = d.tarifLocal
    const tarifSurplus = d.tarifSurplus
    const primeInvestissement = d.primeInvestissement
    const charges = d.charges
    const ebe = d.ebe
    const valeurAjoutee = d.valeurAjoutee
    const accise = d.accise
    const taxeFonciere = d.taxeFonciere
    const ifer = d.ifer
    const cfe = d.cfe
    const provisionOnduleurs = d.provisionOnduleurs
    const interetsDetteSenior = d.interetsDetteSenior
    const interetsDSRA = d.interetsDSRA
    const resultatFiscal = d.resultatFiscal
    const is = d.is
    const investissement = d.investissement
    const amortissement = d.amortissement
    const apport = d.p.apport
    const dscr = d.dscr
    const exploitation = d.exploitation
    const turpe = d.turpe
    const assurance = d.assurance
    const divers = d.divers

    let an = new Date().getFullYear()
</script>

<div class="p-10">
    <h1 class="my-8 text-4xl font-bold">
        <span class="text-primary">Projetez-vous</span> dans votre projet.
    </h1>
    <div class="text-2xl mt-10">
        Durée d'analyse : {$N} ans
    </div>

    <h2 class="text-2xl my-3 mt-5">Résultat</h2>
    <div class="ms-3 flex flex-col gap-5">
        <h3 class="text-xl mt-5">Résultat net</h3>

        <div class="font-bold text-lg">
            Cumulé : <span class="text-primary"
                >{format(sum($resultatNet, $N))}</span>
        </div>

        <div class="flex flex-wrap">
            <div class="flex flex-col my-3">
                <div class="titreligne tcellt">Année</div>
                <div class="titreligne tcellt">Résultat net</div>
            </div>
            {#each Array(Math.ceil($N)), i (i)}
                <div class="flex flex-col my-3">
                    <div class="tcellt">{an + i}</div>
                    <div class="tcellt">
                        {$resultatNet[i].toFixed(arr)}
                    </div>
                </div>
            {/each}
        </div>
    </div>
    <h2 class="text-2xl my-3">Détail</h2>
    <div class="ms-3 flex flex-col gap-5">
        <h3 class="text-xl mt-5">Chiffre d'affaires</h3>
        <div class="font-bold text-lg">
            Cumulé : <span class="text-primary"
                >{format(sum($chiffreAffaires, $N))}</span>
        </div>
        <div class="flex flex-wrap">
            <div class="flex flex-col my-4">
                <div class="titreligne tcellt">Année</div>
                <div class="titreligne tcellt">Autoproduction (€)</div>
                <div class="titreligne tcellt">Vente locale (€)</div>
                <div class="titreligne tcellt">Vente de surplus (€)</div>
                <div class="titreligne tcellt">Prime</div>
                <div class="titreligne tcellt">Chiffre d'affaires</div>
            </div>
            {#each Array(Math.ceil($N)), i (i)}
                <div class="d-flex flex-column my-4">
                    <div class="tcellt">{an + i}</div>
                    <div class="tcellt">
                        {(
                            $productionAnnuelle[i] *
                            (($autoprod * $tarifAllo[i]) / 100)
                        ).toFixed(0)}
                    </div>
                    <div class="tcellt">
                        {(
                            $productionAnnuelle[i] *
                            (($autoconso * $tarifLocal[i]) / 100)
                        ).toFixed(0)}
                    </div>
                    <div class="tcellt">
                        {(
                            $productionAnnuelle[i] *
                            ((1 - $autoconso / 100) * $tarifSurplus[i])
                        ).toFixed(0)}
                    </div>
                    <div class="tcellt">
                        {#if i == 0}{$primeInvestissement}{:else}&nbsp;{/if}
                    </div>
                    <div class="tcellt">
                        {$chiffreAffaires[i].toFixed(arr)}
                    </div>
                </div>
            {/each}
        </div>

        <h3 class="text-xl mt-10">Charges d'exploitation</h3>
        <div class="font-bold text-lg">
            Cumulé : <span class="text-primary"
                >{format(sum($charges, $N))}</span>
        </div>

        <div class="flex flex-wrap">
            <div class="flex flex-col my-4">
                <div class="titreligne tcellt">Année</div>
                <div class="titreligne tcellt">Maintenance (€)</div>
                <div class="titreligne tcellt">TURPE (€)</div>
                <div class="titreligne tcellt">Assurance (€)</div>
                <div class="titreligne tcellt">Divers</div>
                <div class="titreligne tcellt">Total charges</div>
            </div>
            {#each Array(Math.ceil($N)), i (i)}
                <div class="flex flex-col my-4">
                    <div class="tcellt">{an + i}</div>
                    <div class="tcellt">
                        {$exploitation[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$turpe[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$assurance[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$divers[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$charges[i].toFixed(arr)}
                    </div>
                </div>
            {/each}
        </div>

        <h3 class="text-xl mt-10">Excédent brut d'exploitation</h3>
        <div class="font-bold text-lg">
            Cumulé : <span class="text-primary">{format(sum($ebe, $N))}</span>
        </div>

        <div class="flex flex-wrap">
            <div class="flex flex-col my-4">
                <div class="titreligne tcellt">Année</div>
                <div class="titreligne tcellt">Valeur ajoutée (€)</div>
                <div class="titreligne tcellt">Accise (€)</div>
                <div class="titreligne tcellt">IFER (€)</div>
                <div class="titreligne tcellt">Taxe foncière</div>
                <div class="titreligne tcellt">
                    Cotisation foncière des entreprises
                </div>
                <div class="titreligne tcellt">
                    Excédent brut d'exploitation
                </div>
            </div>
            {#each Array(Math.ceil($N)), i (i)}
                <div class="flex flex-col my-4">
                    <div class="tcellt">{an + i}</div>
                    <div class="tcellt">
                        {$valeurAjoutee[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$accise[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$ifer[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$taxeFonciere.toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$cfe.toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$ebe[i].toFixed(arr)}
                    </div>
                </div>
            {/each}
        </div>
        <h3 class="text-xl mt-10">Résultat net</h3>
        <div class="text-bold text-lg">
            Cumulé : <span class="text-primary"
                >{format(sum($resultatNet, $N))}</span>
        </div>

        <div class="flex flex-wrap">
            <div class="flex flex-col my-4">
                <div class="titreligne tcellt">Année</div>
                <div class="titreligne tcellt">
                    Onduleurs&nbsp;<Question
                        datatip="Provision pour le remplacement des onduleurs" />
                </div>
                <div class="titreligne tcellt">Amortissement</div>
                <div class="titreligne tcellt">Intérêts dette senior</div>
                <div class="titreligne tcellt">
                    Intérêts DSRA&nbsp;<Question
                        datatip="Dans un emprunt, compte bancaire qui permettra de payer le service de la dette si jamais l'entité emprunteuse n'est plus en mesure de le faire." />
                </div>
                <div class="titreligne tcellt">Résultat fiscal</div>
                <div class="titreligne tcellt">Impôt sur les sociétés</div>
                <div class="titreligne tcellt">Résultat net</div>
            </div>
            {#each Array(Math.ceil($N)), i (i)}
                <div class="flex flex-col my-4">
                    <div class="tcellt">{an + i}</div>
                    <div class="tcellt">
                        {$provisionOnduleurs[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$amortissement[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$interetsDetteSenior[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$interetsDSRA[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$resultatFiscal[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$is[i].toFixed(arr)}
                    </div>
                    <div class="tcellt">
                        {$resultatNet[i].toFixed(arr)}
                    </div>
                </div>
            {/each}
        </div>
        {#if $investissement > $apport}
            <h3 class="text-xl my-3">Couverture de la dette</h3>
            <div class="flex flex-wrap">
                <div class="flex flex-col my-3">
                    <div class="titreligne tcellt">Année</div>
                    <div class="titreligne tcellt">DSCR</div>
                </div>
                {#each Array(Math.ceil($N)), i (i)}
                    <div class="flex flex-col my-3">
                        <div class="tcellt">{an + i}</div>
                        <div class="tcellt">
                            {fmt2.format($dscr[i])}
                        </div>
                    </div>
                {/each}
            </div>
        {/if}
    </div>
</div>

<style>
    .tcellt {
        border-bottom: 1px solid var(--color-primary);
        display: flex;
    }
    .tcellt:last-child {
        border-bottom: unset;
    }
    .tcellt {
        padding: 8px 10px;
    }
</style>
