<?php

namespace App\Http\Livewire;

use App\Models\Impresora;
use App\Models\User;
use App\Printer\PrinterHandler;
use Livewire\Component;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
use Mike42\Escpos\Printer;

class ImpresoraController extends Component
{
    public $impresora, $impresoraUser;
    public $modal = false;

    protected $rules = [
        'impresora.estacion' => 'required',
        'impresora.nombre_impresora' => 'required',
        'impresora.is_compartida' => 'required'
    ];
    public function render()
    {
        $impresoraUser = auth()->user()->impresora_id;
        return view('impresora.impresora',[
            'impresoras' => Impresora::paginate(10),
        ]);
    }

    public function create()
    {
        $this->impresora = new Impresora();
        $this->impresora->is_compartida = false;
        $this->openModal();
    }

    public function saveImpresora()
    {
        $user = User::findOrFail(auth()->user()->id);

        $user->impresora_id = $this->impresoraUser;
        $user->save();
        session()->flash('messageImpresora','Impresora vinculada correctamente.');
    }

    public function save()
    {
        $this->validate([
            'impresora.estacion' => 'required',
        ]);

        if($this->impresora->is_compartida)
        {
            $this->validate([
                'impresora.nombre_impresora' => 'required'                
            ]);
        }
        else if(!is_numeric($this->impresora->nombre_impresora))
        {   
            $this->impresora->nombre_impresora = 9100;
        }

        $this->impresora->save();

        session()->flash('message','La impresora se guardo correctamente.');
        $this->closeModal();
        $this->clearInputs();
    }

    public function imprimir(Impresora $impresora)
    {
        try {
            $printer = new PrinterHandler($impresora, $impresora->is_compartida?PrinterHandler::PRINTER_BY_SHARED:PrinterHandler::PRINTER_BY_IP);
            // 32 caracteres
            $printer->testPage();
            
            session()->flash('message','Impresion enviada a: '.'smb://'.$impresora->estacion.'/'.$impresora->nombre_impresora);
        } catch (\Throwable $th) {
            session()->flash('error','No se pudo establecer conexión con la impresora, verifica configuración.'.$th->getMessage());
        }
    }

    public function delete(Impresora $impresora)
    {
        $impresora->delete();
        session()->flash('message','La impresora se ha eliminado correctamente.');
    }
    public function openModal()
    {
        $this->modal = true;
    }

    public function closeModal()
    {
        $this->modal = false;
    }

    public function clearInputs()
    {
        $this->reset();
    }
}
