<?php

namespace App\Http\Controllers;

use App\Models\SyllabusArchivo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

class SyllabusArchivoController extends Controller
{
    public function upload(Request $request)
    {
        $this->validate($request, [
            'archivo' => 'required|file|max:10240',
            'curso_id' => 'required|integer',
            'domain_id' => 'required|integer'
        ]);

        try {
            $file = $request->file('archivo');
            $nombreOriginal = $file->getClientOriginalName();
            $extension = $file->getClientOriginalExtension();
            $tipoArchivo = $file->getMimeType();
            $tamanoArchivo = $file->getSize();

            // Leer el archivo y convertirlo a Base64
            $contenidoBase64 = base64_encode(file_get_contents($file->getRealPath()));

            $nombreUnico = Str::uuid() . '_' . time() . '.' . $extension;
            
            $esImagen = in_array(strtolower($extension), ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg']);

            // Guardar en la base de datos CON el contenido en Base64
            $archivo = SyllabusArchivo::create([
                'curso_id' => $request->curso_id,
                'domain_id' => $request->domain_id,
                'nombre_original' => $nombreOriginal,
                'nombre_archivo' => $nombreUnico,
                'ruta_archivo' => null, // Ya no necesitamos ruta física
                'tipo_archivo' => $tipoArchivo,
                'tamano_archivo' => $tamanoArchivo,
                'es_imagen' => $esImagen,
                'contenido_base64' => $contenidoBase64 // 👈 Nuevo campo
            ]);

            // Generar URL para servir el archivo
            $baseUrl = rtrim($request->getSchemeAndHttpHost(), '/');
            $url = $baseUrl . '/api/test/syllabus/file/' . $archivo->id;

            return response()->json([
                'success' => true,
                'data' => [
                    'id' => $archivo->id,
                    'nombre_original' => $archivo->nombre_original,
                    'tipo_archivo' => $archivo->tipo_archivo,
                    'tamano_archivo' => $archivo->tamano_archivo,
                    'es_imagen' => $archivo->es_imagen,
                    'created_at' => $archivo->created_at,
                    'updated_at' => $archivo->updated_at
                ],
                'url' => $url
            ], 201);

        } catch (\Exception $e) {
            return response()->json([
                'error' => 'Error al subir archivo: ' . $e->getMessage()
            ], 500);
        }
    }

    // 👇 NUEVO: Método para servir archivos desde Base64
    public function serveFile($id)
    {
        try {
            $archivo = SyllabusArchivo::findOrFail($id);
            
            // Decodificar Base64
            $contenido = base64_decode($archivo->contenido_base64);
            
            // Retornar el archivo con el tipo MIME correcto
            return response($contenido)
                ->header('Content-Type', $archivo->tipo_archivo)
                ->header('Content-Disposition', 'inline; filename="' . $archivo->nombre_original . '"')
                ->header('Cache-Control', 'public, max-age=31536000');
                
        } catch (\Exception $e) {
            return response()->json([
                'error' => 'Archivo no encontrado'
            ], 404);
        }
    }

    public function getArchivosByCurso($cursoId)
    {
        $archivos = SyllabusArchivo::where('curso_id', $cursoId)
            ->orderBy('created_at', 'desc')
            ->get()
            ->map(function($archivo) {
                $baseUrl = rtrim(request()->getSchemeAndHttpHost(), '/');
                
                return [
                    'id' => $archivo->id,
                    'nombre_original' => $archivo->nombre_original,
                    'tipo_archivo' => $archivo->tipo_archivo,
                    'tamano_archivo' => $archivo->tamano_archivo,
                    'es_imagen' => $archivo->es_imagen,
                    'url' => $baseUrl . '/api/test/syllabus/file/' . $archivo->id,
                    'created_at' => $archivo->created_at
                ];
            });

        return response()->json($archivos);
    }

    public function delete($id)
    {
        try {
            $archivo = SyllabusArchivo::findOrFail($id);
            $archivo->delete();

            return response()->json([
                'success' => true,
                'message' => 'Archivo eliminado correctamente'
            ], 200);

        } catch (\Exception $e) {
            return response()->json([
                'error' => 'Error al eliminar archivo: ' . $e->getMessage()
            ], 500);
        }
    }
}