<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;

class PeriodoController extends Controller
{
  

    public function getAllPeriodos(Request $request)
    {
        try {
            $periodos = DB::table('periodos')->get();

            return response()->json([
                'mensaje' => 'Periodos obtenidos correctamente',
                'data' => $periodos,
            ], 200);
        } catch (\Exception $e) {
            return response()->json([
                'mensaje' => 'Error al obtener los periodos: ' . $e->getMessage()
            ], 500);
        }
    }

    public function crearPeriodo(Request $request)
    {
        try {
            $validated = $request->validate([
                'idPeriodo' => 'required|string|max:10',
                'nombrePeriodo' => 'required|string|max:100',
                'fechaFinalizacion' => 'required|date',
            ]);

            DB::table('periodos')->insert([
                'idEscuela' => 'COLEGIOABC',
                'idPeriodo' => $validated['idPeriodo'],
                'nombrePeriodo' => $validated['nombrePeriodo'],
                'fechaFinalizacion' => $validated['fechaFinalizacion'],
                'estatus' => 'Inactivo',
                'ulActualizacion' => now(),
            ]);

            // Crear carpeta en S3 (la carpeta se crea al subir un archivo vacío o establecer un "prefix")
            $folderPath = 'periodos/' . $validated['idPeriodo'] . '/';
            Storage::disk('s3')->put($folderPath . 'readme.txt', 'Carpeta creada para el periodo ' . $validated['idPeriodo']);



            return response()->json([
                'mensaje' => 'Periodo creado correctamente',
                'carpetaS3' => $folderPath,
            ], 201);

        } catch (\Exception $e) {
            return response()->json([
                'mensaje' => 'Error al crear el periodo: ' . $e->getMessage()
            ], 500);
        }
    }

    public function activarPeriodo(Request $request)
    {
        try {
            $validated = $request->validate([
                'idPeriodo' => 'required|string|max:10',
            ]);

            
            DB::table('periodos')
                ->where('estatus', '<>', 'Eliminado')
                ->update(['estatus' => 'Inactivo']);

            // Activar el periodo seleccionado
            DB::table('periodos')
                ->where('idPeriodo', $validated['idPeriodo'])
                ->update([
                    'estatus' => 'Activo',
                    'ulActualizacion' => now(),
                ]);

            return response()->json([
                'mensaje' => 'Periodo activado correctamente',
                'idPeriodo' => $validated['idPeriodo']
            ], 200);

        } catch (\Exception $e) {
            return response()->json([
                'mensaje' => 'Error al activar el periodo: ' . $e->getMessage()
            ], 500);
        }
    }

    public function eliminarPeriodo(Request $request)
    {
        try {
            $validated = $request->validate([
                'idPeriodo' => 'required|string|max:10',
            ]);

            $updated = DB::table('periodos')
                ->where('idPeriodo', $validated['idPeriodo'])
                ->update([
                    'estatus' => 'Eliminado',
                    'ulActualizacion' => now(),
                ]);

            if ($updated) {
                return response()->json([
                    'mensaje' => 'Periodo eliminado correctamente',
                    'idPeriodo' => $validated['idPeriodo']
                ], 200);
            } else {
                return response()->json([
                    'mensaje' => 'No se encontró el periodo para eliminar'
                ], 404);
            }

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

    public function habilitarPeriodo(Request $request)
    {
        try {
            $validated = $request->validate([
                'idPeriodo' => 'required|string|max:10',
            ]);

            $updated = DB::table('periodos')
                ->where('idPeriodo', $validated['idPeriodo'])
                ->update([
                    'estatus' => 'Inactivo',
                    'ulActualizacion' => now(),
                ]);

            if ($updated) {
                return response()->json([
                    'mensaje' => 'Periodo eliminado correctamente',
                    'idPeriodo' => $validated['idPeriodo']
                ], 200);
            } else {
                return response()->json([
                    'mensaje' => 'No se encontró el periodo para eliminar'
                ], 404);
            }

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




}
