<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Movimiento extends Model
{
    use HasFactory;

    protected $fillable = [
        'codigo',
        'pago_efectivo',
        'pago_tarjeta',
        'pago_vales',
        'pago_transferencia',
        'precio_venta',
        'nota_credito',
        'estado_movimiento_id',
        'user_id',
        'is_liquidado',
        'motivo',
    ];


    public function estadoMovimiento()
    {
        return $this->belongsTo(EstadoMovimiento::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function totalAbono()
    {
        return ((float)$this->pago_efectivo + 
        (float)$this->pago_tarjeta +
        (float)$this->pago_vales +
        (float)$this->pago_transferencia +
        (float)$this->nota_credito);
    }

    public function cambio()
    {
        return (
            ((float)$this->pago_efectivo +
            (float)$this->pago_tarjeta +
            (float)$this->pago_vales +
            (float)$this->nota_credito +
            (float)$this->pago_transferencia) -
            (float)$this->precio_venta
        );
    }

    public function faltante()
    {
        return (
            (float)$this->precio_venta -
            ((float)$this->pago_efectivo +
            (float)$this->pago_tarjeta +
            (float)$this->pago_vales +
            (float)$this->pago_transferencia +
            (float)$this->nota_credito)
        );
    }

    public function ajusteCambio()
    {
        if(((float)$this->pago_efectivo) - $this->cambio()>=0)
        {
            $this->pago_efectivo-= $this->cambio();
        }
    }

    /**
     * Create a new Eloquent model instance.
     *
     * @return void
     */    
    public function isTotalMayorCambio() : bool
    {
        
        return ($this->pago_tarjeta + $this->pago_vales + $this->pago_transferencia + $this->nota_credito)>$this->precio_venta;
    }

    public function getAbonos()
    {
        $collecion = collect($this->getFillable());
        $elements = [];
        foreach ($collecion as $value) {
            if(str_contains($value,"pago_"))
            {
                if($this->{$value} > 0)
                {
                    $elements[] = [$this->{$value},str_replace("pago_","",$value)];
                }
            }
            else if(str_contains($value,"nota_credito"))
            {
                if($this->{$value} > 0)
                {
                    $elements[] = [$this->{$value},str_replace("nota_","Nota de ",$value)];
                }
            }
        }

        return $elements;
    }
}
