<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class PrimaNota extends \App\Models\AbstractModels\AbstractPrimaNota
{
    // Tipi di movimento della prima nota\
    const ENTRATA = 'entrata';
    const USCITA = 'uscita';
    const STORNO = 'storno';
    const NOTA_CREDITO = 'nota_credito';
    const STAFF = 'staff';
    const NO_CONTABILE = 'no_contabile';

    public function scopeConFiltriIndice($query, ?array $filtri = null)
    {
        $filtri = $filtri ?? request()->only([
            'data_inizio',
            'data_fine',
            'categoria_contabile_id',
            'tipo_movimento',
        ]);

        if (!empty($filtri['data_inizio'])) {
            $query->whereDate('created_at', '>=', $filtri['data_inizio']);
        }

        if (!empty($filtri['data_fine'])) {
            $query->whereDate('created_at', '<=', $filtri['data_fine']);
        }

        if (!empty($filtri['categoria_contabile_id'])) {
            $query->where('categoria_contabile_id', $filtri['categoria_contabile_id']);
        }

        if (!empty($filtri['tipo_movimento'])) {
            $query->where('tipo_movimento', $filtri['tipo_movimento']);
        }

        return $query;
    }

    public static function statisticheFiltrate(int $attivitaId, ?array $filtri = null): array
    {
        $base = static::query()
            ->where('attivita_id', $attivitaId)
            ->conFiltriIndice($filtri);

        $importoEntrate = (clone $base)->where('tipo_movimento', self::ENTRATA)->sum('importo');
        $importoUscite = (clone $base)->where('tipo_movimento', self::USCITA)->sum('importo');

        return [
            'totale_operazioni' => (clone $base)->count(),
            'importo_entrate' => $importoEntrate,
            'importo_uscite' => $importoUscite,
            'saldo' => $importoEntrate - $importoUscite,
        ];
    }

    public static function getTipiMovimento()
    {
        return collect([
            self::ENTRATA => [
                'label' => 'Entrata',
                'value' => self::ENTRATA,
            ],
            self::USCITA => [
                'label' => 'Uscita',
                'value' => self::USCITA,
            ],
            // self::STORNO => [
            //     'label' => 'Storno',
            //     'value' => self::STORNO,
            // ],
            // self::NOTA_CREDITO => [
            //     'label' => 'Nota credito',
            //     'value' => self::NOTA_CREDITO,
            // ],
            // self::STAFF => [
            //     'label' => 'Staff',
            //     'value' => self::STAFF,
            // ],
            self::NO_CONTABILE => [
                'label' => 'Non contabilizzati',
                'value' => self::NO_CONTABILE,
            ],
        ]);
    }
}
