<?php

namespace App\Http\Controllers\Administracion;

use App\Http\Controllers\Controller;
use App\Models\ProcesoAdmision;
use App\Models\ProcesoAdmisionDetalle;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;

class ProcesoAdmisionDetalleController extends Controller
{

    public function index(Request $request, $procesoId)
    {
        ProcesoAdmision::findOrFail($procesoId);

        $q = ProcesoAdmisionDetalle::query()->where('proceso_admision_id', $procesoId);

        if ($request->filled('tipo')) {
            $q->where('tipo', $request->string('tipo'));
        }

        return response()->json($q->orderByDesc('id')->get());
    }


    public function store(Request $request, $procesoId)
    {
        ProcesoAdmision::findOrFail($procesoId);

        // ✅ Convertir JSON string -> array antes de validar (cuando llega desde FormData)
            if ($request->has('listas') && is_string($request->input('listas'))) {
                $decoded = json_decode($request->input('listas'), true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $request->merge(['listas' => $decoded]);
                }
            }

            if ($request->has('meta') && is_string($request->input('meta'))) {
                $decoded = json_decode($request->input('meta'), true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $request->merge(['meta' => $decoded]);
                }
            }


        $data = $request->validate([
            'tipo' => ['required', Rule::in(['requisitos','pagos','vacantes','cronograma'])],
            'titulo_detalle' => ['required','string','max:255'],
            'descripcion' => ['nullable','string'],

            'listas' => ['nullable','array'],
            'meta' => ['nullable','array'],

            'url' => ['nullable','string','max:500'],

            'imagen' => ['nullable','image','mimes:jpg,jpeg,png,webp','max:10240'],
            'imagen_2' => ['nullable','image','mimes:jpg,jpeg,png,webp','max:10240'],
        ]);

        $data['proceso_admision_id'] = (int) $procesoId;

        if ($request->hasFile('imagen')) {
            $data['imagen_path'] = $request->file('imagen')->store('admisiones/detalles', 'public');
        }
        if ($request->hasFile('imagen_2')) {
            $data['imagen_path_2'] = $request->file('imagen_2')->store('admisiones/detalles', 'public');
        }

        $detalle = ProcesoAdmisionDetalle::create($data);

        return response()->json($detalle, 201);
    }


    public function show($id)
    {
        return response()->json(ProcesoAdmisionDetalle::findOrFail($id));
    }


    public function update(Request $request, $id)
    {
        $detalle = ProcesoAdmisionDetalle::findOrFail($id);

        // ✅ Convertir JSON string -> array antes de validar (cuando llega desde FormData)
            if ($request->has('listas') && is_string($request->input('listas'))) {
                $decoded = json_decode($request->input('listas'), true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $request->merge(['listas' => $decoded]);
                }
            }

            if ($request->has('meta') && is_string($request->input('meta'))) {
                $decoded = json_decode($request->input('meta'), true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $request->merge(['meta' => $decoded]);
                }
            }


        $data = $request->validate([
            'tipo' => ['sometimes', Rule::in(['requisitos','pagos','vacantes','cronograma'])],
            'titulo_detalle' => ['sometimes','string','max:255'],
            'descripcion' => ['sometimes','nullable','string'],

            'listas' => ['sometimes','nullable','array'],
            'meta' => ['sometimes','nullable','array'],

            'url' => ['sometimes','nullable','string','max:500'],

            'imagen' => ['sometimes','nullable','image','mimes:jpg,jpeg,png,webp','max:10240'],
            'imagen_2' => ['sometimes','nullable','image','mimes:jpg,jpeg,png,webp','max:10240'],
        ]);

        if ($request->hasFile('imagen')) {
            if ($detalle->imagen_path) Storage::disk('public')->delete($detalle->imagen_path);
            $data['imagen_path'] = $request->file('imagen')->store('admisiones/detalles', 'public');
        }

        if ($request->hasFile('imagen_2')) {
            if ($detalle->imagen_path_2) Storage::disk('public')->delete($detalle->imagen_path_2);
            $data['imagen_path_2'] = $request->file('imagen_2')->store('admisiones/detalles', 'public');
        }

        $detalle->update($data);

        return response()->json($detalle->fresh());
    }

    public function destroy($id)
    {
        $detalle = ProcesoAdmisionDetalle::findOrFail($id);

        if ($detalle->imagen_path) Storage::disk('public')->delete($detalle->imagen_path);
        if ($detalle->imagen_path_2) Storage::disk('public')->delete($detalle->imagen_path_2);

        $detalle->delete();

        return response()->json(['message' => 'Detalle eliminado']);
    }
}
