<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\TwilioService;
use Twilio\Security\RequestValidator;
use App\Helper\ClinicIdentityHelper;
use App\Models\Patients;
use App\Models\Appointments;
use App\Helper\Helper;

class WhatsAppController extends Controller
{
    protected $twilio;

    public function __construct(TwilioService $twilio)
    {
        $this->twilio = $twilio;
    }


    public function handleIncoming(Request $request)
    {

        $validator = new RequestValidator(env('TWILIO_AUTH_TOKEN'));
    
        $isValid = $validator->validate(
            $request->header('X-Twilio-Signature'),
            $request->fullUrl(),
            $request->toArray()
        );
        
        if (!$isValid) {
            abort(403, 'Invalid Twilio request');
        }
        $from = $request->input('From');
        $body = $request->input('Body');

        $from = str_replace('whatsapp:', '', $from);
        $from = str_replace(env('TWILIO_COUNTRY_CODE'), '', $from);
        $from = substr($from, -10);

        $clinicIdentity = ClinicIdentityHelper::getActiveIdentity();

        $website = $clinicIdentity->website;
        if(preg_match('/^V-[0-9]/', strtoupper($body))){
            $number = str_replace('V-', '', strtoupper($body));
            $patient = Patients::where('identification', $number)->first();
            if($patient){
               $appointments = Appointments::where('patients_id', $patient->id)->latest()->first();
               if($appointments){
                    $date = date('d/m/Y', strtotime($appointments->date));
                    $time = date('g:i A', strtotime($appointments->date));
                    $name = ucwords(strtolower($patient->firstname)) . " " . ucwords(strtolower($patient->lastname));
                    $detail = Helper::buildMessageAppointmentWhatsApp($appointments);
                    $this->twilio->sendWhatsAppMessage($from, "Hola sr(a). {$name} 😊, tienes una cita para el día {$date} a las {$time}, por aqui tienes el detalle de tu cita\n\n{$detail}");
               }else{
                  $this->twilio->sendWhatsAppMessage($from, "Lo siento sr(a). {$name} 😊, parece que no tienes citas programadas, agenda tu cita en nuestra web {$website} 🌐");
               }
            }else{
               $this->twilio->sendWhatsAppMessage($from, "Lo siento, parece que no estas en nuestra base de datos, agenda tu cita en nuestra web {$website} 🌐 😊");
            }
        }else{
            switch ($body) {
         
                case '1':
                // Lógica para crear cita
                $this->twilio->sendWhatsAppMessage($from, "¡Hola! Para agendar tu cita, visita nuestra página web oficial: {$website} 🌐. Si aún no eres paciente, ¡no te preocupes! Puedes registrarte fácilmente en el mismo sitio y luego solicitar tu cita sin problemas. ¡Te esperamos! 😊");
                break;
                    
                case '2':
                // Lógica para consultar citas
                $this->twilio->sendWhatsAppMessage($from, "¡Listo! Ahora, por favor, ingresa tu número de cédula en este formato: V-21536162");
                break;
                case '3':
                // Conocer direccion
                $this->twilio->sendWhatsAppMessage($from, "¡Estás a un paso de encontrarnos! 📍 Nuestra dirección es: *{$clinicIdentity->address}* ¡Te esperamos con los brazos abiertos!");
                break;
                case '4':
                // Visitar web
                $this->twilio->sendWhatsAppMessage($from, "¡Hola! Para agendar tu cita, visita nuestra página web oficial: {$website} 🌐. Si aún no eres paciente, ¡no te preocupes! Puedes registrarte fácilmente en el mismo sitio y luego solicitar tu cita sin problemas. ¡Te esperamos! 😊");
                break;
                case '5':
                // Horario
                $this->twilio->sendWhatsAppMessage($from, "¡Hola! Nuestro horario de atención es {$clinicIdentity->working_hours}. ¡Te esperamos! 😊");
                break;
                    
                default:
                $this->twilio->sendWelcomeMenu($from);
            }
        }
        
        
    
        
        return response()->json(['success' => true]);
    }

    
}