<?php

namespace App\Http\Controllers;

use App\Http\Requests\StoreSetRequest;
use App\Models\Set;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Mail;
use App\Mail\ReporteSetMail;

class SetController extends Controller
{
    /**
     * Listado de sets del usuario autenticado.
     */
    public function index()
    {
        $sets = Auth::user()
            ->sets()
            ->latest()
            ->paginate(10);

        return view('sets.index', compact('sets'));
    }

    /**
     * Formulario para crear un nuevo set.
     */
    public function create()
    {
        $materiales = config('sampedro.materiales');
        $sucursales = config('sampedro.sucursales');

        return view('sets.create', compact('materiales', 'sucursales'));
    }

    /**
     * Almacena el nuevo set en base de datos.
     */
public function store(StoreSetRequest $request)
{
    $data = $request->validated();

    $evidenciaPath = null;
    $evidenciaTipo = null;

    if ($request->hasFile('evidencia')) {
        $file          = $request->file('evidencia');
        $evidenciaPath = $file->store('evidencias', 'public');
        $evidenciaTipo = 'image';
    }

    $set = Set::create([
        'user_id'                => Auth::id(),
        'codigo_set'             => $data['codigo_set'],
        'referencia'             => $data['referencia'],
        'descripcion_referencia' => $data['descripcion_referencia'] ?? null,
        'cantidad'               => $data['cantidad'] ?? null,
        'material'               => $data['material'],
        'sucursal'               => $data['sucursal'],
        'notas'                  => $data['notas'] ?? null,
        'evidencia_path'         => $evidenciaPath,
        'evidencia_tipo'         => $evidenciaTipo,
    ]);

    // Enviar correo — si falla no bloquea la redirección
    try {
        Mail::to('analistainformacion@imsampedro.com')->send(new ReporteSetMail($set));
    } catch (\Exception $e) {
        \Log::error('Error enviando correo: ' . $e->getMessage());
    }

    return redirect()->route('sets.show', $set)->with('success', '¡Registro guardado!');
}

    /**
     * Detalle / reporte de un set.
     */
    public function show(Set $set)
    {
        abort_if((int)$set->user_id !== (int)Auth::id(), 403);
        return view('sets.show', compact('set'));
    }

    /**
     * Trae los sets desde SQL Server (Proyectos.dbo.vMaestroSetGenericos)
     */
/**
 * Lista todos los sets disponibles desde SQL Server
 */
/**
 * Lee los sets desde el archivo JSON local
 */
    public function obtenerSets()
    {
        try {
            $path = storage_path('app/sets.json');

            if (!file_exists($path)) {
                return response()->json(['error' => 'Archivo sets.json no encontrado'], 500);
            }

            $sets = json_decode(file_get_contents($path), true);
            return response()->json($sets);

        } catch (\Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }
    }

    /**
     * Lee las referencias de un set desde el archivo JSON local
     */
    public function obtenerReferenciasSet($codSet)
    {
        try {
            $path = storage_path('app/referencias.json');

            if (!file_exists($path)) {
                return response()->json(['error' => 'Archivo referencias.json no encontrado'], 500);
            }

            $todas = json_decode(file_get_contents($path), true);

            // Decodificar el código del set (viene con %2F en lugar de /)
            $codSet = urldecode($codSet);

            $filtradas = array_values(array_filter($todas, function($ref) use ($codSet) {
                return $ref['CodSet'] === $codSet;
            }));

            return response()->json($filtradas);

        } catch (\Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }
    }
}
