<?php

namespace App\Http\Controllers\Api\V1;

use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\Request;

class SettingController extends Controller
{
    /**
     * Get settings that are safe for the frontend.
     * Note: Telegram bot token is usually kept secret, but we might send it to superadmins
     * so they can see the current config.
     */
    public function index(Request $request)
    {
        $user = $request->user();
        
        // Solo superadmin puede ver todo. Usuarios normales no deberian ver el token
        if ($user->role !== 0) {
            return response()->json([
                'success' => false,
                'error' => 'No autorizado'
            ], 403);
        }

        $settings = Setting::all()->pluck('value', 'key');
        
        return response()->json([
            'success' => true,
            'data' => [
                'telegram_bot_token' => $settings->get('telegram_bot_token', ''),
                'telegram_chat_id' => $settings->get('telegram_chat_id', '')
            ]
        ]);
    }

    /**
     * Save settings (Superadmin only)
     */
    public function store(Request $request)
    {
        $user = $request->user();
        if ($user->role !== 0) {
            return response()->json([
                'success' => false,
                'error' => 'No autorizado'
            ], 403);
        }

        $request->validate([
            'telegram_bot_token' => [
                'nullable',
                'string',
                'required_with:telegram_chat_id',
                'regex:/^[0-9]+:[a-zA-Z0-9_-]+$/'
            ],
            'telegram_chat_id' => [
                'nullable',
                'string',
                'required_with:telegram_bot_token',
                'regex:/^-?[0-9]+$/'
            ]
        ], [
            'telegram_bot_token.required_with' => 'El Token del Bot es requerido si se especifica un Chat ID.',
            'telegram_bot_token.regex' => 'El Token del Bot no tiene un formato válido (ej. 1234567890:AAH_XxXx...).',
            'telegram_chat_id.required_with' => 'El Chat ID es requerido si se especifica un Token del Bot.',
            'telegram_chat_id.regex' => 'El Chat ID debe ser un valor numérico (ej. -1001234567890 o 987654321).'
        ]);

        Setting::updateOrCreate(
            ['key' => 'telegram_bot_token'],
            ['value' => $request->telegram_bot_token]
        );

        Setting::updateOrCreate(
            ['key' => 'telegram_chat_id'],
            ['value' => $request->telegram_chat_id]
        );

        return response()->json([
            'success' => true,
            'message' => 'Configuración guardada correctamente'
        ]);
    }

    /**
     * Test Telegram settings (Superadmin only)
     */
    public function testTelegram(Request $request)
    {
        $user = $request->user();
        if ($user->role !== 0) {
            return response()->json([
                'success' => false,
                'error' => 'No autorizado'
            ], 403);
        }

        $request->validate([
            'telegram_bot_token' => 'required|string|regex:/^[0-9]+:[a-zA-Z0-9_-]+$/',
            'telegram_chat_id' => 'required|string|regex:/^-?[0-9]+$/'
        ], [
            'telegram_bot_token.required' => 'El Token del Bot es requerido para realizar la prueba.',
            'telegram_bot_token.regex' => 'El Token del Bot no tiene un formato válido (ej. 1234567890:AAH_XxXx...).',
            'telegram_chat_id.required' => 'El Chat ID es requerido para realizar la prueba.',
            'telegram_chat_id.regex' => 'El Chat ID debe ser un valor numérico (ej. -1001234567890 o 987654321).'
        ]);

        $token = $request->telegram_bot_token;
        $chatId = $request->telegram_chat_id;
        $date = now()->timezone('America/Bogota')->format('Y-m-d H:i:s');
        
        $message = "🔔 *Orion Red: Conexión Exitosa*\n\n¡Felicidades! La integración de Telegram con Orion Red ha sido configurada y probada correctamente. 🎉\n\n👤 *Probado por:* {$user->name}\n🕒 *Fecha:* {$date}";

        try {
            $response = \Illuminate\Support\Facades\Http::post("https://api.telegram.org/bot{$token}/sendMessage", [
                'chat_id' => $chatId,
                'text' => $message,
                'parse_mode' => 'Markdown'
            ]);

            if ($response->successful() && isset($response->json()['ok']) && $response->json()['ok'] === true) {
                return response()->json([
                    'success' => true,
                    'message' => 'Mensaje de prueba enviado con éxito a Telegram.'
                ]);
            }

            $tgError = $response->json()['description'] ?? 'Error desconocido de Telegram';
            return response()->json([
                'success' => false,
                'error' => "Telegram rechazó la petición: {$tgError} (Asegúrate de haberle dado /start al bot)."
            ], 400);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'error' => 'No se pudo conectar con el servidor de Telegram: ' . $e->getMessage()
            ], 500);
        }
    }
}
