<?php

namespace App\Services;

use Twilio\Rest\Client;
use Twilio\Exception\TwilioException;

class TwilioService
{
    protected $client;

    public function __construct()
    {
        $this->client = new Client(
            env('TWILIO_SID'),
            env('TWILIO_AUTH_TOKEN')
        );
    }

    public function sendWelcomeMenu(string $to): array
    {
        try {
            // Sanitize and format the recipient's number
            $formattedTo = env('TWILIO_COUNTRY_CODE') . preg_replace('/[^0-9]/', '', $to);

            // Construct the engaging message with a clear call to action
            $message = "¡Hola! 👋 Te damos la bienvenida a nuestro servicio de atención por WhatsApp. ¿En qué podemos ayudarte hoy?\n\n";
            $message .= "Selecciona una opción enviando el *número* correspondiente:\n\n";
            $message .= "1.   📅 *Crear nueva cita*\n";
            $message .= "2.  👀 *Consultar cita existente*\n";
            $message .= "3.  📍 *Conocer nuestra dirección*\n";
            $message .= "4.  🌐 *Visitar nuestra página web*\n";
            $message .= "5.  ⏰ *Ver nuestros horarios de atención*\n\n";
            $message .= "¡Estamos aquí para asistirte!";

            // Send the message via Twilio
            $response = $this->client->messages->create(
                "whatsapp:{$formattedTo}",
                [
                    "from" => "whatsapp:" . env('TWILIO_WHATSAPP_NUMBER'),
                    "body" => $message
                ]
            );

            // Return a concise success response
            return [
                'success' => true,
                'message_sid' => $response->sid,
                'status' => $response->status,
                'to' => $formattedTo
            ];

        } catch (TwilioException $e) {
            // Handle Twilio-specific errors gracefully
            return [
                'success' => false,
                'error' => $e->getMessage(),
                'code' => $e->getCode()
            ];
        } catch (\Exception $e) {
            // Catch any other unexpected errors
            return [
                'success' => false,
                'error' => 'Ocurrió un error inesperado al enviar el mensaje: ' . $e->getMessage(),
                'code' => $e->getCode()
            ];
        }
    }

    public function sendWhatsAppMessage(string $to, string $message)
    {
        try {
            $to =   env('TWILIO_COUNTRY_CODE') . preg_replace('/[^0-9]/', '', $to);
            $response = $this->client->messages->create(
                "whatsapp:{$to}",
                array(
                    "from" => "whatsapp:".env('TWILIO_WHATSAPP_NUMBER'),
                  //  "contentSid" => "HXb5b62575e6e4ff6129ad7c8efe1f983e",
                   // "contentVariables" =>'{"1":"12/1","2":"3pm"}',
                    "body" => $message
                  )
        );
           
        // Devuelve solo el SID del mensaje en lugar del objeto completo
        return [
            'success' => true,
            'message_sid' => $response->sid,
            'status' => $response->status
        ];
        
        } catch (\Twilio\Exceptions\TwilioException $e) {
            return [
                'success' => false,
                'error' => $e->getMessage(),
                'code' => $e->getCode()
            ];
        }
    }
}