<?php

namespace App\Filament\Resources\ProductoResource\Pages;

use App\Filament\Resources\ProductoResource;
use App\Models\Producto;
use Filament\Actions;
use Filament\Resources\Pages\EditRecord;
use Illuminate\Support\Facades\Log;

class EditProducto extends EditRecord
{
    protected static string $resource = ProductoResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Actions\DeleteAction::make(),
        ];
    }

    protected function mutateFormDataBeforeFill(array $data): array
    {
        Log::info('Cargando datos para edición:', $data);
        
        // Convertir valores base a campos auxiliares para mostrar en el formulario
        $unidadMedida = $data['unidad_medida'] ?? 'unidad';
        
        // Convertir stock base a campo auxiliar
        if (isset($data['stock'])) {
            $data['stock_entrada'] = Producto::convertirDesdeUnidades($data['stock'], $unidadMedida);
            Log::info('Stock convertido para edición:', [
                'stock_base' => $data['stock'],
                'stock_entrada' => $data['stock_entrada'],
                'unidad_medida' => $unidadMedida
            ]);
        }
        
        // Convertir stock mínimo base a campo auxiliar
        if (isset($data['stock_minimo'])) {
            $data['stock_minimo_entrada'] = Producto::convertirDesdeUnidades($data['stock_minimo'], $unidadMedida);
            Log::info('Stock mínimo convertido para edición:', [
                'stock_minimo_base' => $data['stock_minimo'],
                'stock_minimo_entrada' => $data['stock_minimo_entrada'],
                'unidad_medida' => $unidadMedida
            ]);
        }
        
        // Convertir stock máximo base a campo auxiliar
        if (isset($data['stock_maximo'])) {
            $data['stock_maximo_entrada'] = Producto::convertirDesdeUnidades($data['stock_maximo'], $unidadMedida);
            Log::info('Stock máximo convertido para edición:', [
                'stock_maximo_base' => $data['stock_maximo'],
                'stock_maximo_entrada' => $data['stock_maximo_entrada'],
                'unidad_medida' => $unidadMedida
            ]);
        }
        
        Log::info('Datos finales para formulario de edición:', $data);
        
        return $data;
    }

    protected function mutateFormDataBeforeSave(array $data): array
    {
        Log::info('Datos recibidos en EditProducto:', $data);
        
        // Asegurar que descripcion no esté vacía
        if (empty($data['descripcion']) || is_null($data['descripcion'])) {
            $data['descripcion'] = 'Sin descripción';
        }
        
        // Procesar stock inicial
        if (isset($data['stock_entrada'])) {
            $stockEntrada = $data['stock_entrada'];
            $unidadMedida = $data['unidad_medida'] ?? 'unidad';
            
            // Convertir a unidades
            $stockEntradaFloat = is_numeric($stockEntrada) ? (float) $stockEntrada : 0.0;
            $data['stock'] = Producto::convertirAUnidades($stockEntradaFloat, $unidadMedida);
            
            Log::info('Stock procesado:', [
                'stock_entrada' => $stockEntrada,
                'unidad_medida' => $unidadMedida,
                'stock_final' => $data['stock']
            ]);
        }
        
        // Procesar stock mínimo
        if (isset($data['stock_minimo_entrada'])) {
            $stockMinimoEntrada = $data['stock_minimo_entrada'];
            $unidadMedida = $data['unidad_medida'] ?? 'unidad';
            
            // Convertir a unidades
            $stockMinimoEntradaFloat = is_numeric($stockMinimoEntrada) ? (float) $stockMinimoEntrada : 0.0;
            $data['stock_minimo'] = Producto::convertirAUnidades($stockMinimoEntradaFloat, $unidadMedida);
            
            Log::info('Stock mínimo procesado:', [
                'stock_minimo_entrada' => $stockMinimoEntrada,
                'unidad_medida' => $unidadMedida,
                'stock_minimo_final' => $data['stock_minimo']
            ]);
        }
        
        // Procesar stock máximo
        if (isset($data['stock_maximo_entrada'])) {
            $stockMaximoEntrada = $data['stock_maximo_entrada'];
            $unidadMedida = $data['unidad_medida'] ?? 'unidad';
            
            // Convertir a unidades
            $stockMaximoEntradaFloat = is_numeric($stockMaximoEntrada) ? (float) $stockMaximoEntrada : 0.0;
            $data['stock_maximo'] = Producto::convertirAUnidades($stockMaximoEntradaFloat, $unidadMedida);
            
            Log::info('Stock máximo procesado:', [
                'stock_maximo_entrada' => $stockMaximoEntrada,
                'unidad_medida' => $unidadMedida,
                'stock_maximo_final' => $data['stock_maximo']
            ]);
        }
        
        // Remover campos auxiliares que no deben guardarse
        unset($data['stock_entrada'], $data['stock_minimo_entrada'], $data['stock_maximo_entrada']);
        
        Log::info('Datos finales para editar producto:', $data);
        
        return $data;
    }
}
