<?php

use Models\Module;
use Modules\Anagrafiche\Anagrafica;
use Modules\Banche\Banca;
use Modules\Scadenzario\Scadenza;
use Plugins\PresentazioniBancarie\Gestore;

include_once __DIR__.'/init.php';

echo '
<style>
.select2-selection__rendered {
    line-height: 21px !important;
}
.select2-container .select2-selection--single {
    height: 25px !important;
}
.select2-selection__arrow {
    height: 24px !important;
    position: absolute !important;
    top: -1px !important;
}
</style>
<script>
$(document).ready(function () {
    $("#pulsanti .pull-right").hide();
})
</script>
<p>'.tr('Riepilogo di esportazione dei pagamenti').'.</p>';

// Azienda predefinita
$azienda = Anagrafica::find(setting('Azienda predefinita'));
$banca_azienda = Gestore::getBancaPredefinitaAzienda();
if (empty($banca_azienda)) {
    echo '
<div class="alert alert-warning">
    <i class="fa fa-warning"></i>
    '.tr("La banca dell'azienda non รจ definita o non ha impostati i campi Codice IBAN e BIC").'.
    '.Modules::link('Banche', $azienda->id, tr('Imposta'), null, null).'
</div>';
}

$scadenze = Scadenza::with('documento')->whereIn('id', $records);

// Filtro per scadenze pagate
$esporta_pagati = get('pagati');
if (!$esporta_pagati) {
    $scadenze = $scadenze->whereRaw('ABS(pagato) < ABS(da_pagare)');
}

// Filtro per scadenze esportate in precedenza
$esporta_processati = get('processati');
if (!$esporta_processati) {
    $scadenze = $scadenze->whereNull('presentazioni_exported_at');
}

// Lettura delle informazioni
$scadenze = $scadenze->get();
$id_scadenze = $scadenze->pluck('id');

$raggruppamento = $scadenze->groupBy('idanagrafica');
if ($raggruppamento->isEmpty()) {
    echo '
<p>'.tr('Nessun pagamento disponibile secondo la selezione effettuata').'.</p>';

    return;
}

foreach ($raggruppamento as $id_anagrafica => $scadenze_anagrafica) {
    $anagrafica = $scadenze_anagrafica->first()->anagrafica;

    echo '
<h3>
    '.$anagrafica->ragione_sociale;

    $banca_controparte = Banca::where('id_anagrafica', $anagrafica->id)
        ->where('predefined', 1)
        ->first();
    if (empty($banca_controparte)) {
        echo '
</h3>
<p>'.tr('Banca predefinita non impostata').'.</p>';
        continue;
    }

    echo '
</h3>
<table class="table table-sm table-striped">
    <thead>
        <tr>
            <th>'.tr('Causale').'</th>
            <th class="text-center">'.tr('Data').'</th>
            <th class="text-center">'.tr('Totale').'</th>
        </tr>
    </thead>

    <tbody>';

    $scadenze = $scadenze_anagrafica->sortBy('scadenza');
    foreach ($scadenze as $scadenza) {
        $totale = abs($scadenza->da_pagare) - abs($scadenza->pagato);

        echo '
        <tr>
            <td>
                <span>
                    '.$scadenza->descrizione.'
                </span>';

        $data_esportazione = $scadenza->presentazioni_exported_at;
        if (!empty($data_esportazione)) {
            echo '
                <span class="badge pull-right">'.tr('Esportato in data: _DATE_', [
                '_DATE_' => timestampFormat($data_esportazione),
            ]).'</span>';
        }

        $banca_controparte = Gestore::getBancaControparte($scadenza);

        if ($database->tableExists('co_mandati_sepa')) {
            $rs_mandato = $dbo->fetchArray('SELECT * FROM co_mandati_sepa WHERE id_banca = '.prepare($banca_controparte->id));
        } else {
            $rs_mandato = false;
        }

        $is_rid = in_array($scadenza->documento->pagamento['codice_modalita_pagamento_fe'], ['MP09', 'MP10', 'MP11']);
        $is_riba = in_array($scadenza->documento->pagamento['codice_modalita_pagamento_fe'], ['MP12']);
        $is_sepa = in_array($scadenza->documento->pagamento['codice_modalita_pagamento_fe'], ['MP19', 'MP20', 'MP21']);
        $is_bonifico = in_array($scadenza->documento->pagamento['codice_modalita_pagamento_fe'], ['MP05']);

        $documento = $scadenza->documento;
        $pagamento = $documento->pagamento;

        if ($is_rid) {
            if (!$rs_mandato) {
                echo '
                <span class="badge badge-danger">'.tr('Id mandato mancante').'</span>';
            }

            if (!$banca_azienda->creditor_id) {
                echo '
                <span class="badge badge-danger">'.tr('Id creditore mancante').'</span>';
            }
        } elseif (($is_riba && empty($banca_azienda->codice_sia)) || ($is_bonifico && empty($banca_azienda->codice_sia))) {
            echo '
                <span class="badge badge-danger">'.tr('Codice SIA banca emittente mancante').'</span>';
        }

        if ($is_sepa) {
            // Prima, successiva, singola

            $scadenze_antecedenti = $dbo->fetchArray('SELECT * FROM `co_scadenziario` INNER JOIN `co_documenti` ON `co_scadenziario`.`iddocumento`=`co_documenti`.`id` INNER JOIN `co_pagamenti` ON `co_documenti`.`idpagamento`=`co_pagamenti`.`id` LEFT JOIN `co_pagamenti_lang` ON (`co_pagamenti`.`id` = `co_pagamenti_lang`.`id_record` AND `co_pagamenti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `co_documenti`.`idanagrafica`='.prepare($id_anagrafica)." AND `codice_modalita_pagamento_fe` IN('MP19','MP20','MP21') AND `data_emissione`<".prepare($scadenza->data_emissione));

            $check_successiva = '';
            $check_prima = '';
            $check_singola = '';

            if (sizeof($scadenze_antecedenti) > 0) {
                $check_successiva = 'selected';
            } else {
                $check_prima = 'selected';
            }

            if (sizeof($rs_mandato) > 0) {
                if ($rs_mandato[0]['singola_disposizione'] == '1') {
                    $check_singola = 'selected';

                    $check_successiva = '';
                    $check_prima = '';
                }
            }

            echo '
                <span class="pull-right" style="margin-right:15px;">
                    <select class="sequenza" name="sequenza[]" data-idscadenza="'.$scadenza->id.'" style="width:300px;">
                        <option value="">- Seleziona una sequenza -</option>
                        <option value="FRST" '.$check_prima.'>Prima di una serie di disposizioni</option>
                        <option value="RCUR" '.$check_successiva.'>Successiva di una serie di disposizioni di incasso</option>
                        <option value="FNAL">Ultima di una serie di disposizioni</option>
                        <option value="OOFF" '.$check_singola.'>Singola diposizione non ripetuta</option>
                    </select>
                </span>';
        }

        echo '
            </td>
            <td class="text-center">
                '.dateFormat($scadenza->scadenza).'
            </td>
            <td class="text-right">
                '.moneyFormat($totale).'
            </td>
        </tr>';
    }

    echo '
    </tbody>
</table>';
}

echo '
<div class="row">
    <div class="col-md-12 text-right">
        <button type="button" class="btn btn-primary '.(!empty($banca_azienda) ? '' : 'disabled').'" onclick="esporta(this)">
            <i class="fa fa-download"></i> '.tr('Esporta').'
        </button>
    </div>
</div>

<div class="row hidden" id="info">
    <div class="col-md-12">
        <p>'.tr('Le scadenze selezionate sono state esportate nei seguenti file').':</p>
        <ul id="files"></ul>
    </div>

    <div class="col-md-12 text-right">
        <button type="button" id="registrazione_contabile" class="btn btn-primary" onclick="registraPagamenti(this)">
            <i class="fa fa-save"></i> '.tr('Registrazione contabile').'
        </button>
    </div>
</div>';

$modulo_prima_nota = Module::where('name', 'Prima nota')->first()->id;
echo '
<script>

$(".sequenza").select2();

function esporta(button) {
    let restore = buttonLoading(button);

    //Creo un array con i valori di sequenza
    var inputs = $(".sequenza");
    var sequenze = new Array();
    for(var i = 0; i < inputs.length; i++){
        if($(inputs[i]).val()){
            sequenze[i] = $(inputs[i]).data("idscadenza")+"-"+$(inputs[i]).val();
        }
    }

    $.ajax({
        url: globals.rootdir + "/actions.php",
        cache: false,
        type: "POST",
        dataType: "json",
        data: {
            id_module: globals.id_module,
            id_plugin: "'.$id_plugin.'",
            scadenze: ['.implode(',', $id_scadenze->toArray()).'],
            sequenze: sequenze,
            op: "generate",
        },
    }).then(function(response) {
        buttonRestore(button, restore);

        if (response.scadenze.length) {
            $(button).addClass("hidden");
            $("#info").removeClass("hidden");

            // Salvataggio delle scadenze esportate correttamente
            $("#registrazione_contabile").data("scadenze", response.scadenze);

            // Creazione dei link per il download dei file
            let fileList = $("#files");
            for(const file of response.files){
                fileList.append(`<li>
    <a href="` + file + `" target="_blank">` + file + `</a>
    <button type="button" class="btn btn-xs btn-info" onclick="scaricaFile(\'` + file + `\')">
        <i class="fa fa-download"></i>
    </button>
</li>`)
            }
        } else {
             swal({
                title: "'.tr('Impossibile esportare le scadenze indicate!').'",
                type: "error",
            })
        }
    });
}

function scaricaFile(file) {
    fetch(file)
        .then(resp => resp.blob())
        .then(blob => {
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement("a");
            a.style.display = "none";
            a.href = url;

            // the filename you want
            a.download = file.split("/").pop();
            document.body.appendChild(a);
            a.click();

            window.URL.revokeObjectURL(url);
        })
      .catch(() => swal("'.tr('Errore').'", "'.tr('Errore durante il download').'", "error"));
}

function registraPagamenti(button) {
    let scadenze = $(button).data("scadenze");

    openModal("'.tr('Registrazione contabile pagamento').'", globals.rootdir + "/add.php?id_module='.$modulo_prima_nota['id'].'&id_records=" + scadenze.join(";"));
}
</script>';