<?php
namespace App\Http\Controllers;
use App\Models\Licencia;
use App\Models\Empresa;
use App\Services\LicenciaService;
use Illuminate\Http\Request;
use Carbon\Carbon;

class LicenciaController extends Controller {
    protected $licenciaService;
    public function __construct(LicenciaService $s) { $this->licenciaService = $s; }
    public function index() {
        $licencias = Licencia::with("empresa")->latest()->get();
        return view("licencias.index", compact("licencias"));
    }
    public function create() {
        $empresas = Empresa::where("estado","ACTIVO")->get();
        return view("licencias.create", compact("empresas"));
    }
    public function store(Request $request) {
        $request->validate(["empresa_id"=>"required|exists:empresas,id","tipo"=>"required","fecha_inicio"=>"required|date","fecha_vencimiento"=>"required|date"]);
        $empresa = Empresa::findOrFail($request->empresa_id);
        $f = $request->fecha_vencimiento;
        $hash = $this->licenciaService->generarClaveLicencia($empresa->ruc, $f);
        $token = base64_encode(json_encode(["ruc"=>$empresa->ruc,"expires"=>$f,"signature"=>$hash]));
        Licencia::create(["empresa_id"=>$empresa->id,"clave_licencia"=>$token,"tipo"=>$request->tipo,"fecha_inicio"=>Carbon::parse($request->fecha_inicio)->format("Y-m-d"),"fecha_vencimiento"=>$f,"estado"=>"ACTIVA"]);
        return redirect()->route("licencias.index")->with("success","Licencia generada exitosamente.")->with("token_generado",$token);
    }
    public function show($id) {
        $licencia = Licencia::with("empresa")->findOrFail($id);
        return view("licencias.show", compact("licencia"));
    }
    public function cambiarEstado($id, $estado) {
        $l = Licencia::findOrFail($id); $l->estado = $estado; $l->save();
        return back()->with("success","Estado actualizado a ".$estado);
    }
}