<?php

namespace App\Http\Controllers\Admin\Ranch;

use App\Http\Controllers\Controller;
use App\Models\ConfiguracionEmpresa;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Inertia\Inertia;
use Inertia\Response;

class ConfiguracionEmpresaPageController extends Controller
{
    public function edit(): Response
    {
        $config = ConfiguracionEmpresa::obtenerConfiguracion();

        if (! $config) {
            $config = ConfiguracionEmpresa::create([
                'nombre_empresa' => 'Control Ganadero',
                'nombre_corto' => 'RANCHO',
                'nombre_largo' => 'Sistema de Gestión Ganadera',
                'descripcion' => 'Inventario de ganado, engorda, pesajes y balance del rancho.',
                'email' => 'contacto@rancho.local',
                'pais' => 'México',
                'activo' => true,
            ]);
        }

        return Inertia::render('Ranch/Config/Edit', [
            'config' => $config,
        ]);
    }

    public function update(Request $request): RedirectResponse
    {
        $validated = $request->validate([
            'nombre_empresa' => ['required', 'string', 'max:255'],
            'nombre_corto' => ['required', 'string', 'max:50'],
            'nombre_largo' => ['required', 'string', 'max:500'],
            'rfc' => ['nullable', 'string', 'max:13'],
            'descripcion' => ['nullable', 'string', 'max:1000'],
            'telefono' => ['nullable', 'string', 'max:20'],
            'email' => ['nullable', 'email', 'max:255'],
            'direccion' => ['nullable', 'string', 'max:500'],
            'codigo_postal' => ['nullable', 'string', 'max:10'],
            'ciudad' => ['nullable', 'string', 'max:100'],
            'estado' => ['nullable', 'string', 'max:100'],
            'pais' => ['nullable', 'string', 'max:100'],
            'sitio_web' => ['nullable', 'url', 'max:255'],
            'logo' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif,svg,webp', 'max:2048'],
        ]);

        $config = ConfiguracionEmpresa::obtenerConfiguracion();
        if (! $config) {
            return back()->with('error', 'No se encontró la configuración.');
        }

        $logo = $request->file('logo');
        unset($validated['logo']);

        $config->update($validated);

        if ($logo) {
            $this->ensureStorageDirectories();
            if ($config->logo_path) {
                $config->eliminarLogo();
            }
            $path = $logo->store('public/logos');
            $config->update([
                'logo_path' => $path,
                'logo_original_name' => $logo->getClientOriginalName(),
                'logo_mime_type' => $logo->getMimeType(),
                'logo_size_bytes' => $logo->getSize(),
            ]);
        }

        return back()->with('success', 'Configuración actualizada.');
    }

    private function ensureStorageDirectories(): void
    {
        $path = storage_path('app/public/logos');
        if (! File::exists($path)) {
            File::makeDirectory($path, 0755, true);
        }
    }
}
