<?php

namespace App\Services;
use App\Models\WhatsappConfig;
use App\Contracts\SendWhatsapp;
 
class Whatsapp implements SendWhatsapp {
    
    public function send($to, $from, $data , $order)
    {    
       
        if (strpos($to, '+91') !== false) {
            $to = substr($to, 3);
        }
       
        $WhatsappProvider = WhatsappConfig::where('id' , '1')->where('is_active' , 1)->first();
        if (!$WhatsappProvider) {
            return json_encode([
                'result' => 'failed',
                'message' => 'WhatsApp provider is not configured or inactive.',
            ]);
        }

        $url = $WhatsappProvider->base_url.'/'.$WhatsappProvider->your_vendorid.'/contact/send-template-message';
    
        
        $payload = [];

        $fields = [
            'from_phone_number_id' => $WhatsappProvider->phone_number_id,
            'phone_number' => $to,
            'sender_name' => $data['sender_name'] ?? null,
            'template_name' => $data['template_name'] ?? null,
            'template_language' => $data['template_language'] ?? null,
            'header_image' => $data['header_image'] ?? null,
            'header_video' => $data['header_video'] ?? null,
            'header_document' => $data['header_document'] ?? null,
            'header_document_name' => $data['header_document_name'] ?? null,
            'header_field_1' => $data['header_field_1'] ?? null,
            'location_latitude' => $data['location_latitude'] ?? null,
            'location_longitude' => $data['location_longitude'] ?? null,
            'location_name' => $data['location_name'] ?? null,
            'location_address' => $data['location_address'] ?? null,
            'field_1' => $data['field_1'] ?? null,
            'field_2' => $data['field_2'] ?? null,
            'field_3' => $data['field_3'] ?? null,
            'field_4' => $data['field_4'] ?? null,
            'field_5' => $data['field_5'] ?? null,
            'button_0' => $data['button_0'] ?? null,
            'button_1' => $data['button_1'] ?? null,
            'copy_code' => $data['copy_code'] ?? null
        ];
     
        foreach ($fields as $key => $value) {
            if (!empty($value)) {
                $payload[$key] = $value;
            }
        }

        $contact = [];

        $contactFields = [
            'first_name' => $data['contact_first_name'] ?? null,
            'last_name' => $data['contact_last_name'] ?? null,
            'email' => $data['contact_email'] ?? null,
            'country' => $data['contact_country'] ?? null,
            'language_code' => $data['contact_language'] ?? null,
            'groups' => $data['contact_groups'] ?? null
        ];
     

        foreach ($contactFields as $key => $value) {
            if (!empty($value)) {
                $contact[$key] = $value;
            }
        }

        if (!empty($contact)) {
            $payload['contact'] = $contact;
        }


        // api to send message in whatsapp
        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_CONNECTTIMEOUT => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_SSL_VERIFYHOST => 2,
            CURLOPT_SSL_VERIFYPEER => 1,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => json_encode($payload),
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/json',
                'Authorization: Bearer ' . $WhatsappProvider->api_access_token
            ),
        ));

        $response = curl_exec($curl);
        if (curl_errno($curl)) {
            $error = curl_error($curl);
            curl_close($curl);

            return json_encode([
                'result' => 'failed',
                'message' => 'cURL Error: ' . $error,
            ]);
        }

        curl_close($curl);
        return $response;
    }
}