<?php

namespace App\Services\Asporto;

use App\Models\Asporto;
use App\Models\Ordine;
use RuntimeException;

class AsportoService
{
    public function creaAsporto(Ordine $ordine): Asporto
    {
        $asporto = new Asporto();
        $asporto->ordine_id = $ordine->id;
        $asporto->ora_ritiro = $ordine->info['ora_ritiro'] ?? null;
        $asporto->stato = Asporto::PREPARAZIONE;
        $asporto->save();

        return $asporto;
    }

    /**
     * Completa la preparazione e passa l'asporto in chiamata.
     */
    public function avanzaAChiamata(Asporto $asporto): Asporto
    {
        if ($asporto->stato !== Asporto::PREPARAZIONE) {
            throw new RuntimeException('L\'asporto non è in preparazione.');
        }

        $asporto->stato = Asporto::CHIAMATA;
        $asporto->save();

        return $asporto;
    }

    /**
     * Completa la chiamata e passa l'asporto in ritiro.
     */
    public function avanzaARitiro(Asporto $asporto): Asporto
    {
        if ($asporto->stato !== Asporto::CHIAMATA) {
            throw new RuntimeException('L\'asporto non è in chiamata.');
        }

        $asporto->stato = Asporto::RITIRO;
        $asporto->save();

        return $asporto;
    }

    /**
     * Completa il ritiro e marca l'asporto come consegnato.
     */
    public function avanzaAConsegnato(Asporto $asporto): Asporto
    {
        if ($asporto->stato !== Asporto::RITIRO) {
            throw new RuntimeException('L\'asporto non è in ritiro.');
        }

        $asporto->stato = Asporto::CONSEGNATO;
        $asporto->save();

        return $asporto;
    }
}
