<?php

// Defina sua App ID e REST API Key do OneSignal
define("ONESIGNAL_APP_ID", "4d27cddf-82f3-4a78-acbe-b925c2015460");
// define("REST_API_KEY", "NzdkMmExMmUtNjcxZi00NjE3LWIyNjktOTgwM2Y2Y2M0NTI1");
define("REST_API_KEY", "os_v2_app_jut43x4c6nfhrlf6xes4eakuma3oxcb5gdhez5n2ygzizhq2axuidse2hjvspaetqtvmsak44zvs3bvfgtkqu2irk45hcp636ybcjua"); 

class Onsignal extends Core {

    function sendNotification() {
        // Verifica se 'id', 'message' e 'title' foram enviados via POST
        $signatureIds = isset($_POST['id']) ? json_decode($_POST['id'], true) : [];
        $message = isset($_POST['message']) ? $_POST['message'] : '';
        $title = isset($_POST['title']) ? $_POST['title'] : '';
        $notification_for_all = isset($_POST['notification_for_all']) ? 'true' : 'false';
        $button = isset($_POST['button']) ? $_POST['button'] : null;
    
        if (empty($signatureIds) || empty($message) || empty($title)) {
            return [ 'type' => 'ERROR', 'message' => 'Dados incompletos para enviar a notificação.' ];
        }
    
        // Obtém os lead_ids correspondentes aos signature_ids
        $leadIdsResponse = $this->getLeadIdsBySignatureIds($signatureIds);
    
        // Verifica se a busca pelos lead_ids foi bem-sucedida
        if ($leadIdsResponse['type'] !== 'OK') {
            return [ 'type' => 'ERROR', 'message' => 'Erro ao buscar lead_ids.', 'details' => $leadIdsResponse['message'] ];
        }
    
        $leadIds = array_column($leadIdsResponse['data'], 'lead_id');  // Extrai os lead_ids
    
        // Configura o conteúdo da notificação
        $content = array("en" => $message);
        $headings = array("en" => $title);
    
        // Configura os campos para a requisição à API do OneSignal
        $fields = array(
            'app_id' => ONESIGNAL_APP_ID,
            'include_player_ids' => $signatureIds, // Usa os signature_ids para o OneSignal
            'contents' => $content,
            'headings' => $headings
        );
        
        // Verifica se $button não está vazio e adiciona ao array
        if (!empty($button)) {
            $fields['web_buttons'] = array(
                array(
                    "id" => "ver_detalhes",
                    "text" => "Clique Aqui",
                    "url" => $button
                )
            );
        }
        
        // Codifica os campos para JSON
        $fields = json_encode($fields);
    
        // Inicia a chamada cURL para o OneSignal
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Authorization: Basic ' . REST_API_KEY
        ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    
        // Executa a requisição e fecha a conexão cURL
        $response = curl_exec($ch);
        curl_close($ch);
    
        // Decodifica a resposta da API OneSignal
        $response_data = json_decode($response, true);
    
        // Verifica se houve sucesso na resposta
        if (isset($response_data['errors'])) {
            return [ 'type' => 'ERROR', 'message' => 'Erro ao enviar notificação', 'errors' => $response_data['errors'] ];
        }
    
        $notification_id = $response_data['id'];  // ID da notificação retornada pela OneSignal
    
        // Insere a notificação no banco de dados para cada lead_id
        foreach ($leadIds as $lead_id) {
            $this->saveNotificationInDatabase($lead_id, $notification_id, $title, $message, $notification_for_all, $button);
        }
    
        // Retorna o resultado da operação
        return [ 'type' => 'OK', 'data' => $response_data ];
    }
    
    function saveNotificationInDatabase($lead_id, $notification_id, $title, $message, $notification_for_all, $button = null) {
        $sql = "INSERT INTO `onsignal_notifications` (`lead_id`, `notification_id`, `title`, `message`, `data`, `unread`, `notification_for_all`, `button`) 
                VALUES (?, ?, ?, ?, NOW(), 'true', ?, ?)";
        
        $stmt = parent::$conn->prepare($sql);
        $stmt->execute([$lead_id, $notification_id, $title, $message, $notification_for_all, $button]);
    }
    
    function saveUser() {
        
        $data = json_decode($_POST['data'], true);
        
        $lead_id = $data['lead_id']; 
        $onesignal_id = $data['onesignal_id'];
        $external_id = $data['external_id'];
        $signature_id = $data['signature_id'];
        $token = $data['token'];
        
        // SQL para inserir ou atualizar se lead_id já existir
        $sql = "INSERT INTO `onsignal_users`(`lead_id`, `onesignal_id`, `external_id`, `signature_id`, `token`)
                VALUES (?, ?, ?, ?, ?)
                ON DUPLICATE KEY UPDATE 
                `onesignal_id` = VALUES(`onesignal_id`), 
                `external_id` = VALUES(`external_id`), 
                `signature_id` = VALUES(`signature_id`), 
                `token` = VALUES(`token`)";
    
        $stmt = parent::$conn->prepare($sql);
        
        // Executa a query
        if ($stmt->execute([$lead_id, $onesignal_id, $external_id, $signature_id, $token])) {
            return [ 'type' => 'OK' ];
        } else {
            return [ 'type' => 'FAIL' ];
        }
    }
    
    function getUser($lead_ids = null) {
        // Se não forem passados lead_ids diretamente, tenta obtê-los do $_POST
        if (is_null($lead_ids)) {
            // Decodifica o JSON do $_POST e obtém os lead_ids
            $decodedData = json_decode($_POST['leads'], true);
            
            // Verifica se o JSON foi decodificado corretamente
            if (!isset($decodedData['lead_ids']) || !is_array($decodedData['lead_ids'])) {
                return ['type' => 'FAIL', 'message' => 'Invalid input or no lead_ids provided'];
            }
    
            $lead_ids = $decodedData['lead_ids'];
        }
        
        // Verifica se o array de lead_ids não está vazio
        if (empty($lead_ids)) {
            return ['type' => 'FAIL', 'message' => 'No lead_ids provided'];
        }
    
        // Cria placeholders para os parâmetros da query (ex: ?, ?, ?)
        $placeholders = implode(',', array_fill(0, count($lead_ids), '?'));
    
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "SELECT signature_id FROM `onsignal_users` WHERE lead_id IN ($placeholders)"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        $stmt->execute($lead_ids);
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        return ['type' => 'OK', 'data' => $results];
    }
    
    function getAllUser() {
        
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "SELECT signature_id FROM `onsignal_users`"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        $stmt->execute();
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        return [ 'type' => 'OK', 'data' => $results ];
    }
    
    function getLeadIdsBySignatureIds($signatureIds) {
        // Verifica se o array de signature_ids está vazio
        if (empty($signatureIds)) {
            return [ 'type' => 'FAIL', 'message' => 'No signature_ids provided' ];
        }
    
        // Cria placeholders para os parâmetros da query (ex: ?, ?, ?)
        $placeholders = implode(',', array_fill(0, count($signatureIds), '?'));
    
        // SQL para buscar os lead_ids correspondentes aos signature_ids
        $sql = "SELECT lead_id FROM `onsignal_users` WHERE signature_id IN ($placeholders)"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os signature_ids
        $stmt->execute($signatureIds);
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        // Verifica se foram encontrados resultados
        if (empty($results)) {
            return [ 'type' => 'FAIL', 'message' => 'No lead_ids found for provided signature_ids' ];
        }
    
        // Retorna os lead_ids encontrados
        return [ 'type' => 'OK', 'data' => $results ];
    }
    
    function getCompanyIdsBySignatureIds() {
        
        // Obter o company_id a partir do POST
        $company_id = $_POST['id'];
    
        // Verifica se o company_id é válido
        if (empty($company_id)) {
            return ['type' => 'FAIL', 'message' => 'No company_id provided'];
        }
    
        // SQL para buscar o leads.id a partir do company_id e email correspondente
        $sql = "
            SELECT leads.id
            FROM companies
            JOIN leads ON companies.companyemail = leads.email
            WHERE companies.id = ?
        ";
        
        // Preparar e executar a query
        $stmt = parent::$conn->prepare($sql);
        $stmt->execute([$company_id]);
        $leadIds = $stmt->fetchAll(PDO::FETCH_COLUMN); // Obtém apenas a coluna id
        
        // Verifica se encontramos leads correspondentes
        if (empty($leadIds)) {
            return ['type' => 'FAIL', 'message' => 'No leads found for the given company_id'];
        }
    
        // Chama a função getUser com os lead_ids obtidos
        $userData = $this->getUser($leadIds);
    
        // Verifica se a chamada foi bem-sucedida
        if ($userData['type'] === 'OK') {
            return $userData;
        } else {
            return ['type' => 'FAIL', 'message' => 'No signature_ids found'];
        }
        
    }
    
    function listNotification(){
        $lead_id = $_POST['id'];
    
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "SELECT * FROM onsignal_notifications WHERE lead_id = ? OR (notification_for_all = 'true') GROUP BY notification_id ORDER BY data DESC"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        $stmt->execute([$lead_id]);
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if($results){
            return [ 'type' => 'OK', 'data' => $results ];    
        }else{
            return [ 'type' => 'FAIL', 'data' => $results ];    
        }
    }
    
    function getNoficationToAll() {
        
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "SELECT id, title, message, DATE_FORMAT(data, '%d/%m/%Y %H:%i:%s') as data FROM onsignal_notifications WHERE notification_for_all = 'true' GROUP BY notification_id ORDER BY id DESC;"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        $stmt->execute();
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        return [ 'type' => 'OK', 'data' => $results ];
    }
    
    function readNotification(){
        $notification_id = $_POST['id'];
    
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "UPDATE onsignal_notifications SET unread = 'false' WHERE id = ?"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        if($stmt->execute([$notification_id])){
            return [ 'type' => 'OK' ];    
        }else{
            return [ 'type' => 'FAIL' ];
        }
    }
    
    function allReadNotification(){
        $lead_id = $_POST['id'];
    
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "UPDATE onsignal_notifications SET unread = 'false' WHERE lead_id = ?"; 
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        if($stmt->execute([$lead_id])){
            return [ 'type' => 'OK' ];    
        }else{
            return [ 'type' => 'FAIL' ];
        }
    }
    
    function sendEmail() {
        
        $subject = $_POST['subject'];
        $email = $_POST['email'];
        $fullname = $_POST['fullname'];
        $template = $_POST['template'];
        $new = isset($_POST['new']) ? 'true' : 'false';
        $lead_id = !empty($_POST['lead_id']) ? $_POST['lead_id'] : null;
        $vencimento = !empty($_POST['vencimento']) ? DateTime::createFromFormat('Y-m-d', $_POST['vencimento']) : null;
        $datavenc = !empty($_POST['vencimento']) ? $vencimento->format('Y-m-d'): null;
        if(!empty($vencimento)){
            $vencimento = $vencimento->format('d/m/Y');
        }
        $valor = !empty($_POST['valor']) ? $_POST['valor'] : null;
        $url = !empty($_POST['url']) ? $_POST['url'] : null;
        
        if (!empty($lead_id)) {
           
            $sql = "SELECT id FROM onsignal_emails WHERE lead_id = ?";
            $params = [$lead_id];
        
            if (!empty($vencimento)) {
                $sql = "SELECT id FROM onsignal_emails WHERE lead_id = ? AND vencimento IS NOT NULL";
            }
        
            $stmt = parent::$conn->prepare($sql);
            $stmt->execute($params);
        
            // Conta os registros encontrados
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $count = count($results);
        
            if (!empty($vencimento) && $count >= 4) {
                // Bloqueia o script se houver mais de 4 registros com vencimento preenchido
                return ['type' => 'OK', 'message'=> 'limite'];
            }
            
            if(empty($vencimento) && empty($url)){
                if ($results) {
                    // Extrai o primeiro ID do resultado
                    $email_id = $results[0]['id'];
                    if (!empty($email_id)) {
                        return ['type' => 'OK'];
                    }
                }
            }
            
        }
        
        // Configura os campos para a requisição à API do OneSignal
        $fields = array(
            'app_id' => ONESIGNAL_APP_ID,
            'target_channel' => "email",
            'email_subject' => $subject,
            'template_id' => $template,
            'include_email_tokens' => is_array($email) ? $email : [$email],
        );
        
        // Inicializa o array custom_data
        $fields['custom_data'] = array(
            "user" => array()
        );
        
        // Verifica se existe valor em $fullname
        if (!empty($fullname)) {
            $fields['custom_data']['user']['first_name'] = $fullname;
        }
        
        // Verifica se existe valor em $vencimento
        if (!empty($vencimento)) {
            $fields['custom_data']['user']['vencimento'] = $vencimento;
        }
        
        // Verifica se existe valor em $valor
        if (!empty($valor)) {
            $fields['custom_data']['user']['valor'] = "R$ " . number_format($valor / 100, 2, ',', '.');
        }
        
        // Verifica se existe valor em $url
        if (!empty($url)) {
            $fields['custom_data']['user']['url'] = $url;
            $fields['custom_data']['user']['email'] = $email;
        }
    
        // Codifica os campos para JSON
        $fields = json_encode($fields);
    
        // Inicia a chamada cURL para o OneSignal
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Authorization: Basic ' . REST_API_KEY
        ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    
        // Executa a requisição e fecha a conexão cURL
        $response = curl_exec($ch);
        curl_close($ch);
    
        // Decodifica a resposta da API OneSignal
        $response_data = json_decode($response, true);
        $notification_id = $response_data['id'];
        
        if($new == 'true'){
            
            $sql = "SELECT id FROM leads WHERE email = ?";
            $stmt = parent::$conn->prepare($sql);
            $stmt->execute([$email]);
            
            // Obtemos apenas uma linha
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            
            if ($result) {
                // Extrai o ID do resultado
                $lead_id = $result['id'];
            
                // Chama a função com o lead_id
                $this->saveNotificationInDatabase(
                    $lead_id, 
                    $template, 
                    'Bem-vindo(a) ao Memprega!', 
                    'Estamos felizes em tê-lo(a) conosco. Aproveite ao máximo tudo o que nossa plataforma tem a oferecer.', 
                    'false'
                );
            } 
        }
        
        $sql = "INSERT INTO `onsignal_emails`(`lead_id`, `notification_id`, `subject`, `date`, `vencimento`)
                VALUES (?, ?, ?, NOW(), ?)";
        
        $stmt = parent::$conn->prepare($sql);
        $stmt->execute([$lead_id, $notification_id, $subject, $datavenc]);
        
        // Verifica se houve sucesso na resposta
        if (isset($response_data['errors'])) {
            return [ 'type' => 'ERROR', 'message' => 'Erro ao enviar notificação', 'errors' => $response_data['errors'] ];
        }
        
        return [ 'type' => 'OK', 'data' => $response_data ];
        
    }
    
    function getUserNew($lead_ids = null) {
        // Se não forem passados lead_ids diretamente, tenta obtê-los do $_POST
        if (is_null($lead_ids)) {
            // Decodifica o JSON do $_POST e obtém os lead_ids
            $decodedData = json_decode($_POST['leads'], true);
            
            // Verifica se o JSON foi decodificado corretamente
            if (!isset($decodedData['lead_ids']) || !is_array($decodedData['lead_ids'])) {
                return ['type' => 'FAIL', 'message' => 'Invalid input or no lead_ids provided'];
            }
    
            $lead_ids = $decodedData['lead_ids'];
        }
        
        // Verifica se o array de lead_ids não está vazio
        if (empty($lead_ids)) {
            return ['type' => 'FAIL', 'message' => 'No lead_ids provided'];
        }
    
        // Cria placeholders para os parâmetros da query (ex: ?, ?, ?)
        $placeholders = implode(',', array_fill(0, count($lead_ids), '?'));
    
        // SQL para buscar os signature_ids correspondentes aos lead_ids
        $sql = "SELECT lead_id, signature_id FROM `onsignal_users` WHERE lead_id IN ($placeholders)";
        $stmt = parent::$conn->prepare($sql);
    
        // Executa a query com os lead_ids
        $stmt->execute($lead_ids);
        $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
        // Formata os resultados para incluir o lead_id
        $data = [];
        foreach ($results as $row) {
            $data[] = [
                'lead_id' => $row['lead_id'],
                'signature_id' => $row['signature_id'],
            ];
        }
    
        return ['type' => 'OK', 'data' => $data];
    }

    function saveMessageNotification() {
        $company_id = $_POST['company_id'] ?? null;
        $lead_ids = [];
    
        if (!empty($company_id)) {
            $sql = "SELECT leads.id FROM leads
                    INNER JOIN companies ON leads.email = companies.companyemail
                    WHERE companies.id = ?";
            $stmt = parent::$conn->prepare($sql);
            $stmt->execute([$company_id]);
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
            if ($results) {
                $lead_ids = array_column($results, 'id'); // Coleta todos os leads da empresa
            }
        } else {
            $lead_ids = $_POST['lead_id'] ?? [];
            
            // Se for um JSON codificado como string, decodifica
            if (is_string($lead_ids)) {
                $decoded = json_decode($lead_ids, true);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $lead_ids = $decoded;
                }
            }
        
            // Força a conversão para um array plano
            if (!is_array($lead_ids)) {
                $lead_ids = [$lead_ids];
            } else {
                $lead_ids = array_merge([], ...array_map(function ($item) {
                    return is_array($item) ? $item : [$item];
                }, $lead_ids));
            }
            
        }
    
        if (empty($lead_ids)) {
            return ['type' => 'FAIL', 'message' => 'No lead_ids provided'];
        }
    
        $notification_id = $_POST['notification_id'];
        $title = $_POST['title'];
        $message = $_POST['message'];
        $notification_for_all = $_POST['notification_for_all'];
        $button = $_POST['button'] ?? null;
    
        // Preparando a query para inserir múltiplos registros de uma vez
        $sql = "INSERT INTO `onsignal_notifications` (`lead_id`, `notification_id`, `title`, `message`, `data`, `unread`, `notification_for_all`, `button`) 
                VALUES " . implode(',', array_fill(0, count($lead_ids), "(?, ?, ?, ?, NOW(), 'true', ?, ?)"));
    
        $stmt = parent::$conn->prepare($sql);
    
        // Criando um array de valores para a query
        $values = [];
        foreach ($lead_ids as $lead_id) {
            $values = array_merge($values, [$lead_id, $notification_id, $title, $message, $notification_for_all, $button]);
        }
    
        if ($stmt->execute($values)) {
            return ['type' => 'OK'];
        } else {
            return ['type' => 'FAIL', 'message' => 'Database insert failed'];
        }
    }

    function sendEmailImportCurriculo() {

        $subject = $_POST['subject'];        
        $template = $_POST['template'];
        $leads = json_decode($_POST['leads']);        
        $url = $_POST['url'] ?? null;

        if (empty($leads) || !is_array($leads)) {
            return [ 'type' => 'ERROR', 'message' => 'Nenhum lead_id informado ou formato inválido' ];
        }

        foreach ($leads as $lead_id=>$password) {
            $sqlLead = "SELECT CONCAT(firstname, ' ', lastname) as fullname, email FROM leads WHERE id = ?";
            $stmtLead = parent::$conn->prepare($sqlLead);
            $stmtLead->execute([$lead_id]); 
            $lead = $stmtLead->fetch(PDO::FETCH_ASSOC);
            if (!$lead) {
                continue; // Pula se não encontrar
            }   
            $fullname = $lead['fullname'];
            $email = $lead['email'];
            // Monta o array base do user
            $userData = [
                'first_name'   => $fullname,                
                'email' => $email,
                'password' => $password,
                'company_name' => $company
            ];
            // Adiciona a URL somente se não for null ou vazia
            if (!empty($url)) {
                $userData['url'] = $url;
            }
            // Configura os campos para a requisição à API do OneSignal
            $fields = [
                'app_id'              => ONESIGNAL_APP_ID,
                'target_channel'      => "email",
                'email_subject'       => $subject,
                'template_id'         => $template,
                'include_email_tokens'=> [$email], // Email do lead
                'custom_data'         => [
                    'user' => $userData
                ]
            ];
            
            // Codifica os campos para JSON
            $fieldsJson = json_encode($fields);
            // Faz a requisição cURL
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Authorization: Basic ' . REST_API_KEY
            ));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, FALSE);
            curl_setopt($ch, CURLOPT_POST, TRUE);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsJson);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            $response = curl_exec($ch);
            curl_close($ch);
            // Trata a resposta
            
            $response_data = json_decode($response, true);
            $notification_id = isset($response_data['id']) ? $response_data['id'] : null;
            // Salva no histórico
            $sqlInsert = "INSERT INTO `onsignal_emails`(`lead_id`, `notification_id`, `subject`, `date`) VALUES (?, ?, ?, NOW())";
            $stmtInsert = parent::$conn->prepare($sqlInsert);
            $stmtInsert->execute([$lead_id, $notification_id, $subject]);
            // Verifica se houve erro
            if (isset($response_data['errors'])) {
                return [
                    'type' => 'ERROR',
                    'lead_id' => $lead_id,
                    'message' => 'Erro ao enviar email',
                    'errors' => $response_data['errors']
                ];
            }
        }
        return ['type' => 'OK', 'message' => 'E-mails enviados com sucesso'];

    }

    function sendEmailTestFit() {
        $subject = $_POST['subject'];
        $processname = $_POST['processname'];
        $template = $_POST['template'];
        $lead_ids = !empty($_POST['lead_ids']) ? json_decode($_POST['lead_ids']) : null;
        $passwords = !empty($_POST['passwords']) ? json_decode($_POST['passwords']) : null;
        $url = !empty($_POST['url']) ? $_POST['url'] : null;

        if (empty($lead_ids) || !is_array($lead_ids)) {
            return [ 'type' => 'ERROR', 'message' => 'Nenhum lead_id informado ou formato inválido' ];
        }        
        
        foreach ($lead_ids as $lead_id) {            
            $sqlLead = "SELECT CONCAT(firstname, ' ', lastname) as fullname, email FROM leads WHERE id = ?";
            $stmtLead = parent::$conn->prepare($sqlLead);
            $stmtLead->execute([$lead_id]);
            $lead = $stmtLead->fetch(PDO::FETCH_ASSOC);
            if (!$lead) {
                continue; // Pula se não encontrar
            }   
            $fullname = $lead['fullname'];
            $email = $lead['email'];
            // Monta o array base do user
            $userData = [
                'first_name'   => $fullname,
                'process_name' => $processname,
                'email' => $email,
                'password' => $passwords ? $passwords[$lead_id] : null,
                'company_name' => $company
            ];
            // Adiciona a URL somente se não for null ou vazia
            if (!empty($url)) {
                $userData['url'] = $url;
            }
            // Configura os campos para a requisição à API do OneSignal
            $fields = [
                'app_id'              => ONESIGNAL_APP_ID,
                'target_channel'      => "email",
                'email_subject'       => $subject,
                'template_id'         => $template,
                'include_email_tokens'=> [$email], // Email do lead
                'custom_data'         => [
                    'user' => $userData
                ]
            ];
            
            // Codifica os campos para JSON
            $fieldsJson = json_encode($fields);
            // Faz a requisição cURL
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Authorization: Basic ' . REST_API_KEY
            ));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($ch, CURLOPT_HEADER, FALSE);
            curl_setopt($ch, CURLOPT_POST, TRUE);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsJson);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            $response = curl_exec($ch);
            curl_close($ch);
            // Trata a resposta
            
            $response_data = json_decode($response, true);
            $notification_id = isset($response_data['id']) ? $response_data['id'] : null;
            // Salva no histórico
            $sqlInsert = "INSERT INTO `onsignal_emails`(`lead_id`, `notification_id`, `subject`, `date`) VALUES (?, ?, ?, NOW())";
            $stmtInsert = parent::$conn->prepare($sqlInsert);
            $stmtInsert->execute([$lead_id, $notification_id, $subject]);
            // Verifica se houve erro
            if (isset($response_data['errors'])) {
                return [
                    'type' => 'ERROR',
                    'lead_id' => $lead_id,
                    'message' => 'Erro ao enviar email',
                    'errors' => $response_data['errors']
                ];
            }
        }
        return ['type' => 'OK', 'message' => 'E-mails enviados com sucesso'];
    }

    function sendEmailSuport() {
        $subject = $_POST['subject'];
        $email = $_POST['email'];
        $fullname = $_POST['fullname'];
        $cnpj = $_POST['cnpj'];
        $message = $_POST['message'];
        $template = $_POST['template'];
        // Configura os campos para a requisição à API do OneSignal
        $fields = array(
            'app_id' => ONESIGNAL_APP_ID,
            'target_channel' => "email",
            'email_subject' => $subject,
            'template_id' => $template,
            'include_email_tokens' => is_array($email) ? $email : [$email],
        );
        // Inicializa o array custom_data
        $fields['custom_data'] = array(
            "user" => array()
        );
        // Verifica se existe valor em $fullname
        if (!empty($fullname)) {
            $fields['custom_data']['user']['first_name'] = $fullname;
        }
        if (!empty($cnpj)) {
            $fields['custom_data']['user']['cnpj'] = $cnpj;
        }
        if (!empty($message)) {
            $fields['custom_data']['user']['message'] = $message;
        }
        // Codifica os campos para JSON
        $fields = json_encode($fields);
        // Inicia a chamada cURL para o OneSignal
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.onesignal.com/notifications");
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Authorization: Basic ' . REST_API_KEY
        ));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        // Executa a requisição e fecha a conexão cURL
        $response = curl_exec($ch);
        curl_close($ch);
        // Decodifica a resposta da API OneSignal
        $response_data = json_decode($response, true);
        // Verifica se houve sucesso na resposta
        if (isset($response_data['errors'])) {
            return [ 'type' => 'ERROR', 'message' => 'Erro ao enviar Email ao Suporte', 'errors' => $response_data['errors'] ];
        }
        return [ 'type' => 'OK', 'data' => $response_data ];
    }

}