<?php

namespace App\Services\Fatturazione;

use App\Models\Dispositivo;
use App\Models\RigaFatturazione;
use App\Models\ListinoPrezzi;
use App\Models\Ordine;

class RigaFatturazioneService
{
    public function __construct()
    {
    }

    public function aggiornaUtilizzoDispositivo(int $dispositivo_id){

        $dispositivo = Dispositivo::find($dispositivo_id);

        if(!$dispositivo){
            return response(['message' => 'Dispositivo non trovato'], 404);
        }

        //controllo se la RigaFatturazione è già stata fatta oggi
        $RigaFatturazioneOdierna = $this->RigaFatturazioneOdiernaDispositivo($dispositivo);

        if($this->RigaFatturazioneOdiernaDispositivo($dispositivo))
            {
                //cerco RigaFatturazione odierna
                $RigaFatturazione = RigaFatturazione::where('dispositivo_id', $dispositivo->id)
                ->whereDate('created_at', today())->first();
                if(!$RigaFatturazione){
                    return response(['message' => 'RigaFatturazione non trovata per oggi'], 404);
                }
                $RigaFatturazione->ordini = $RigaFatturazione->ordini();
                
                if($RigaFatturazione->ordini() > 5 && $RigaFatturazione->stato == RigaFatturazione::GRATUITO){
                    $RigaFatturazione->stato = RigaFatturazione::REGISTRATO;
                    $RigaFatturazione->prezzo = $RigaFatturazione->listinoPrezzi->prezzo;
                }elseif($RigaFatturazione->ordini() <= 5){
                    $RigaFatturazione->stato = RigaFatturazione::GRATUITO;
                }
                $RigaFatturazione->save();
            }else{
                $RigaFatturazione = $this->creaRigaFatturazioneOdiernaDispositivo($dispositivo);
            }

        return $RigaFatturazione;
    }

    //Crea RigaFatturazione odierna per dispositivo
    public function creaRigaFatturazioneOdiernaDispositivo(Dispositivo $dispositivo){
        $RigaFatturazione = new RigaFatturazione();
        // $RigaFatturazione->user_id = auth()->user()->id;
        $RigaFatturazione->attivita_id = $dispositivo->attivita_id;
        $RigaFatturazione->dispositivo_id = $dispositivo->id;
        // $RigaFatturazione->tipo_dispositivo = $dispositivo->tipo;
        $RigaFatturazione->listino_prezzi_id = ListinoPrezzi::where('tipo_dispositivo', $dispositivo->tipo)->first()->id;
        $RigaFatturazione->tipo = 'consumo';
        $RigaFatturazione->prezzo = 0;
        $RigaFatturazione->stato = RigaFatturazione::GRATUITO;
        $RigaFatturazione->note = 'Utilizzo dispositivo <b>'.$dispositivo->nome.'</b> per l\'attività <b>'.$dispositivo->attivita->nome.'</b> il <b>'.now()->format('d/m/Y').'</b>';
        $RigaFatturazione->path_pdf = null;
        $RigaFatturazione->path_xml = null;
        $RigaFatturazione->metadata = null;
        $RigaFatturazione->ordini = 1;
        $RigaFatturazione->save();
        return $RigaFatturazione;
    }
    //controllo qta ordini pagati oggi per dispositivo
    public function fatturaDispositivoOggi(Dispositivo $dispositivo){
        $ordiniPagati = Ordine::where('dispositivo_id', $dispositivo->id)
        ->whereDate('created_at', now()->startOfDay())
        ->where('stato', Ordine::PAGATO)
        ->count();

        return $ordiniPagati > 5 ? true : false;
    }

    public function RigaFatturazioneOdiernaDispositivo(Dispositivo $dispositivo){
        $RigaFatturazione = RigaFatturazione::where('dispositivo_id', $dispositivo->id)
        ->whereDate('created_at', now()->startOfDay())->first();
        return $RigaFatturazione;
        }
}