<script lang="ts">
 import { ppmt } from 'financial'

 // V3
 export let dette: number

 // V4
 export let taux: number

 // Z8
 export let duree: number

 // Z7
 export let dureeDifferee = 1

 // V8
 export let nombrePeriodesParAn = 12

 let prorataPeriodique = 1 / nombrePeriodesParAn

 // V6
 let dureeAns = duree / nombrePeriodesParAn
 let dureeAns_ = Math.ceil(dureeAns)

 export let remboursement = new Array(duree + 1)
 export let remboursementAnnuel = new Array(dureeAns_)
 export let crd = new Array(duree + 1)
 export let crdAnnuel = new Array(dureeAns_)
 export let interets = new Array(duree + 1)
 export let interetsAnnuels = new Array(dureeAns_)

 $: {
     dureeAns = duree / nombrePeriodesParAn
     dureeAns_ = Math.ceil(dureeAns)
     prorataPeriodique = 1 / nombrePeriodesParAn

     // V10
     let nombreEcheancesPeriodeTronquee = dureeAns * nombrePeriodesParAn

     // V9
     let nombreEcheances = Math.ceil(nombreEcheancesPeriodeTronquee)

     // W11
     let totalPeriodes = (dureeAns * nombrePeriodesParAn) - dureeDifferee

     // X11
     let periodeRemboursementCapital = dureeDifferee

     remboursement = new Array(duree + 1)
     crd = new Array(duree + 1)
     interets = new Array(duree + 1)
     remboursementAnnuel = new Array(dureeAns_)
     crdAnnuel = new Array(dureeAns_)
     interetsAnnuels = new Array(dureeAns_)

     crd[0] = dette
     remboursement[0] = 0
     interets[0] = 0
     crdAnnuel[0] = dette
     remboursementAnnuel[0] = 0
     interetsAnnuels[0] = 0
     for(let i = 1; i <= duree; i++) {
         if(i <= periodeRemboursementCapital) {
             remboursement[i] = 0
         } else if (i < nombreEcheancesPeriodeTronquee) {
             remboursement[i] = ppmt(
                 taux * prorataPeriodique,
                 i - periodeRemboursementCapital,
                 totalPeriodes,
                 -dette,
             )
         } else if (i == nombreEcheances) {
             remboursement[i] = crd[i-1]
         } else {
             remboursement[i] = 0
         }
         crd[i] = crd[i-1] - remboursement[i]
         interets[i] = crd[i-1] * taux * prorataPeriodique
         if((i % nombrePeriodesParAn) == 0) {
             crdAnnuel[i/nombrePeriodesParAn] = crd[i]
             remboursementAnnuel[i/nombrePeriodesParAn] = 0
             interetsAnnuels[i/nombrePeriodesParAn] = 0
         }
         remboursementAnnuel[Math.floor(i/nombrePeriodesParAn)] += remboursement[i]
         interetsAnnuels[Math.floor(i/nombrePeriodesParAn)] += interets[i]
     }
 }

 let annuel = true
</script>

<div class="form-check form-switch">
    <input class="form-check-input" type="checkbox" role="switch" id="annuel" bind:checked={annuel}>
    <label class="form-check-label" for="annuel">Présentation annuelle</label>
</div>

{#if annuel}
    <div class="my-3">
        <table class="table">
            <thead>
                <tr>
                    <th>Année</th>
                    <th>Capital restant dû</th>
                    <th>Principal</th>
                    <th>Intérêts</th>
                </tr>
            </thead>
            <tbody>
                {#each remboursementAnnuel as r, periode}
                    <tr>
                        <td>{periode}</td>
                        <td>{crdAnnuel[periode].toFixed(0)}</td>
                        <td>{r.toFixed(0)}</td>
                        <td>{interetsAnnuels[periode].toFixed(0)}</td>
                    </tr>
                {/each}
            </tbody>
        </table>
    </div>
{:else}
    <div class="my-3">
        <table class="table">
            <thead>
                <tr>
                    <th>Mois</th>
                    <th>Capital restant dû</th>
                    <th>Principal</th>
                    <th>Intérêts</th>
                </tr>
            </thead>
            <tbody>
                {#each remboursement as r, periode}
                    <tr>
                        <td>{periode}</td>
                        <td>{crd[periode].toFixed(0)}</td>
                        <td>{r.toFixed(0)}</td>
                        <td>{#if periode > 0}
                            {interets[periode].toFixed(0)}
                        {/if}
                        </td>
                    </tr>
                {/each}
            </tbody>
        </table>
    </div>
{/if}