<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Laravel\Facades\Image;

class PerfilController extends Controller
{
    public function edit() { return view('usuarios.perfil', ['u' => auth()->user()]); }

    public function update(Request $r)
    {
        $u = auth()->user();
        $datos = $r->validate([
            'nombres' => 'required|string|max:120',
            'apellidos' => 'nullable|string|max:120',
            'telefono' => 'nullable|string|max:30',
            'email' => 'nullable|email|max:150',
            'password_actual' => 'nullable|string',
            'password' => 'nullable|string|min:6|confirmed',
            'clave_firma' => 'nullable|string|min:3',
            'firma_imagen' => 'nullable|image|mimes:png,jpg,jpeg|max:1024',
            'eliminar_firma' => 'nullable|boolean',
        ]);

        if (!empty($datos['password'])) {
            if (!Hash::check($datos['password_actual'] ?? '', $u->password)) {
                return back()->with('error','La contraseña actual no es correcta.');
            }
            $u->password = $datos['password'];
        }

        if (!empty($datos['clave_firma'])) $u->clave_firma = $datos['clave_firma'];

        // Eliminar firma actual si se marcó el checkbox
        if ($r->boolean('eliminar_firma') && $u->firma_imagen) {
            Storage::disk('public')->delete($u->firma_imagen);
            $u->firma_imagen = null;
        }

        // Subir nueva firma
        if ($r->hasFile('firma_imagen')) {
            if ($u->firma_imagen) {
                Storage::disk('public')->delete($u->firma_imagen);
            }
            $archivo = $r->file('firma_imagen');
            $contenido = file_get_contents($archivo->getRealPath());
            try {
                $img = Image::read($contenido);
                if ($img->width() > 600) $img->scaleDown(width: 600);
                if ($img->height() > 200) $img->scaleDown(height: 200);
                $contenido = (string) $img->toPng();
            } catch (\Throwable $e) {
                // si Intervention falla por algún motivo, dejamos el archivo original
            }
            $ruta = 'firmas/firma_' . $u->id . '.png';
            Storage::disk('public')->put($ruta, $contenido);
            $u->firma_imagen = $ruta;
        }

        $u->fill([
            'nombres' => $datos['nombres'],
            'apellidos' => $datos['apellidos'] ?? null,
            'telefono' => $datos['telefono'] ?? null,
            'email' => $datos['email'] ?? null,
        ])->save();

        return back()->with('exito','Perfil actualizado.');
    }
}
