<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Pago;
use App\Models\ServicioDiagnostico;
use App\Services\ReportGenerator;

class InfoInstitucionController extends Controller
{
    public function show()
    {
        $user = Auth::user();
        
        // Obtener datos de sesión si existen
        $institucionData = session('institucion_data', [
            'codigo_local' => '',
            'nombre_ie' => '',
            'nivel_modalidad' => '',
            'nombre_director' => '',
            'telefono' => '',
            'direccion_ie' => '',
            'departamento' => '',
            'email' => '',
            'tipo_gestion' => '',
        ]);

        return view('info-institucion', [
            'user' => $user,
            'institucionData' => $institucionData,
        ]);
    }

    public function procesarPago(Request $request)
    {
        $user = Auth::user();
        
        // Validar datos
        $validated = $request->validate([
            'codigo_local' => 'required|string',
            'nombre_ie' => 'required|string',
            'nivel_modalidad' => 'required|string',
            'nombre_director' => 'required|string',
            'telefono' => 'required|string',
            'direccion_ie' => 'required|string',
            'departamento' => 'required|string',
            'email' => 'required|email',
            'tipo_gestion' => 'required|string',
        ]);

        // Guardar información en sesión
        session(['institucion_data' => $validated]);

        // Actualizar el número de teléfono del usuario en la tabla users
        $user->update(['phone' => $validated['telefono']]);

        // Crear registro de pago con estado "pendiente" (sin metodo_pago aún)
        $pago = Pago::create([
            'user_id' => $user->id,
            'monto' => 250.00,
            'metodo_pago' => null,  // Se seleccionará en la siguiente página
            'estado' => 'pendiente',
            'codigo_local' => $validated['codigo_local'],
            'nombre_ie' => $validated['nombre_ie'],
            'tipo_gestion' => $validated['tipo_gestion'],
            'email' => $validated['email'],
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // Redirigir a página de selección de método de pago
        return redirect()->route('pago.seleccionar', ['pago_id' => $pago->id]);
    }

    public function procesarMetodoPago($pago_id)
    {
        $pago = Pago::findOrFail($pago_id);
        
        // Verificar que el usuario sea el dueño del pago
        if ($pago->user_id !== Auth::id()) {
            abort(403);
        }

        return view('pago-metodo', [
            'pago' => $pago,
        ]);
    }

    public function seleccionarMetodoPago($pago_id)
    {
        $pago = Pago::findOrFail($pago_id);
        
        // Verificar que el usuario sea el dueño del pago
        if ($pago->user_id !== Auth::id()) {
            abort(403);
        }

        return view('pago-seleccionar-metodo', [
            'pago' => $pago,
        ]);
    }

    public function guardarMetodoPago(Request $request, $pago_id)
    {
        $pago = Pago::findOrFail($pago_id);
        
        // Verificar que el usuario sea el dueño del pago
        if ($pago->user_id !== Auth::id()) {
            abort(403);
        }

        // Validar el método de pago
        $validated = $request->validate([
            'metodo_pago' => 'required|string|in:tarjeta,transferencia,yape,plin',
        ]);

        // Actualizar el método de pago
        $pago->update([
            'metodo_pago' => $validated['metodo_pago'],
        ]);

        // Redirigir a la página de instrucciones de pago
        return redirect()->route('pago.metodo', ['pago_id' => $pago->id]);
    }

    public function confirmarPago(Request $request, $pago_id)
    {
        $pago = Pago::findOrFail($pago_id);
        // Verificar que el usuario sea el dueño del pago
        if ($pago->user_id !== Auth::id()) {
            abort(403);
        }

        // Procesar comprobante de pago (voucher)
        $voucherPath = null;
        if ($request->hasFile('comprobantePago')) {
            $voucher = $request->file('comprobantePago');
            $voucherPath = $voucher->store('vouchers', 'public');
        }

        // Simular confirmación de pago
        $pago->update([
            'estado' => 'completado',
            'fecha_pago' => now(),
            'referencia_pago' => 'REF-' . strtoupper(uniqid()),
        ]);

        // CREAR ORDEN DE SERVICIO EN ESTADO PENDIENTE
        ServicioDiagnostico::create([
            'user_id' => Auth::id(),
            'estado' => 'pendiente',
            'fecha_inicio' => now(),
            'notas' => 'Orden creada automáticamente después de completar pago',
            'pei_generado' => false,
            'pat_generado' => false,
            'pci_generado' => false,
            'ri_generado' => false,
            'otros_docs_generado' => false,
        ]);

        // GENERAR REPORTES AQUÍ
        try {
            $generador = new ReportGenerator(Auth::user()->id, $pago->id);
            $resultado = $generador->generarTodos();
            if (!$resultado['success']) {
                \Log::warning('Error al generar reportes: ' . $resultado['mensaje']);
            }
        } catch (\Exception $e) {
            \Log::error('Error critico al generar reportes: ' . $e->getMessage());
        }

        // Enviar comprobante a dos correos
        if ($voucherPath) {
            $emails = ['pagos-diagnostika@ds-innovacion.com', 'admin-diagnostika@ds-innovacion.com'];
            foreach ($emails as $email) {
                \Mail::to($email)->send(new \App\Mail\PagoVoucherMail($pago, storage_path('app/public/' . $voucherPath)));
            }
        }

        // Limpiar sesión
        session()->forget(['institucion_data']);

        // Redirigir al dashboard con mensaje de éxito
        return redirect('/dashboard')->with('success', 'Diagnóstico finalizado exitosamente. El pago de 250 soles ha sido procesado. Se ha registrado su información de institución. Los reportes se encuentran disponibles en Dashboard → Reportes.');
    }
}
