<?php

if ( ! defined( 'ABSPATH' ) ) exit;

class DigitalSignage4_CreationVideoSpecialDataProvider
{
    private $ds4_caller = null;

    public function __construct()
    {
        $this->ds4_caller = DigitalSignage4_caller::getInstance();
    }

    public function siteUrl()
    {
        $result = site_url();
        $result = str_replace('https', 'http', $result);
        $result = str_replace('http://', '', $result);
        return esc_url($result);
    }
	
	
	public function IA_description($question_ia, $id_product){
		// Retrouver la description du produit, son nom et son prix
		$result = "";
		$uid_response = "";

		if ($id_product != '') {
			$productTemp = new WC_Product($id_product);
		} else {
			return '';
		}

		if ($question_ia == '') {
			return '';
		}

		$context = "Nom du produit : " . $productTemp->get_name() . ", vendu : " . $productTemp->get_price() . $this->devise() . ", description du produit : " . $productTemp->get_description();

		// Données pour la première requête
		$datas = [
			"token" => "be3c9b8c02e9d-6ace-10cc-fb99-66c344c54ce3e81eea",
			"action" => "set_request",
			"type" => "text_generation",
			"model" => "gpt-4o",
			"temperature" => 0.7,
			"max_tokens" => 150,
			"nb_response" => 1,
			"system_content" => $context,
			"user_content" => $question_ia,
		];

                
                //var_dump($result);die;
                
		try {
                        $response = DigitalSignage4_API_Linker::post("BridgeIA", $datas, DigitalSignage4_ForfaitManager::instance()->getToken() );
			/*$response = wp_remote_post("https://api.productvideo.io/API_v2/ai.php", [
				'method'  => 'POST',
				'timeout' => 5,
				'body'    => $datas,
			]);*/

			/*if (is_wp_error($response)) {
				$result = esc_html($response->get_error_message());
				return $result;
			}*/

			//$http_code = wp_remote_retrieve_response_code($response);
                        $http_code = $response->getResponseCode();
			if ($http_code == 200) {
				//$response_body = wp_remote_retrieve_body($response);
                                $response_data = $response->getDatas();
				if (!empty($response_data['uid'])) {
					$uid_response = $response_data['uid'];
				}
			}
		} catch (\Throwable $th) {
			throw $th;
		}

		// Boucle pour vérifier le statut de la réponse
		if ($uid_response != "") {
			$i = 0;
			while ($i <= 120) {
				$i++;
				sleep(1);

				// Données pour la deuxième requête
				$datas = [
					"token" => "be3c9b8c02e9d-6ace-10cc-fb99-66c344c54ce3e81eea",
					"action" => "get_response",
					"full" => "false",
					"uid" => $uid_response,
				];

				try {
					$response = wp_remote_post("https://api.productvideo.io/API_v2/ai.php", [
						'method'  => 'POST',
						'timeout' => 5,
						'body'    => $datas,
					]);

					if (is_wp_error($response)) {
						$result = esc_html($response->get_error_message());
						break;
					}

					$http_code = wp_remote_retrieve_response_code($response);
					if ($http_code == 200) {
						$response_body = wp_remote_retrieve_body($response);
						$response_data = json_decode($response_body, true);
						if ($response_data['status'] == 'success' && !empty($response_data['response'])) {
							$result = str_replace('"', "", $response_data['response'][0]);
							break;
						}
					}
				} catch (\Throwable $th) {
					throw $th;
				}
			}
		}

		return $result;
	}
	

	
	
	

    private function capitalizeAndRemoveSpaces($string)
    {
        // Mettre la première lettre de chaque mot en majuscule
        $string = ucwords($string);

        // Supprimer les espaces
        $string = str_replace(' ', '', $string);

        return $string;
    }

    public function replace_unicode_escape_sequence($match)
    {
        return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }

    public function unicode_decode($str)
    {
        return preg_replace_callback('/u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $str);
    }

    private function decode_accents_ds($str)
    {
        //return unicode_decode($str);
        return $str;
    }

    public function getyoutubevideo($product_id)
    {
        $data_youtube=array();
        $data_youtube['titleVideo']='title';
        $data_youtube['summaryVideo']='description';
        $data_youtube['tagsVideo']='';
        //[Nom du produit] + [«  -  » + Première catégorie du produit si la somme des deux n 'excède pas 65 caractères, sinon que Nom du produit]
        if ($product_id!='') {
            $productTemp = new WC_Product($product_id);
            $terms =  get_the_terms($product_id, 'product_cat');
            if ($terms && ! is_wp_error($terms)) {
                $premiere_cat_produit = $this->decode_accents_ds($terms[0]->name);
            } else {
                $premiere_cat_produit = "";
            }
            if ($premiere_cat_produit!="") {
                $temp_chaine = $this->decode_accents_ds($productTemp->get_name()). ' - '.$premiere_cat_produit;
                if (strlen($temp_chaine)> 65) {
                    $temp_chaine = $this->decode_accents_ds($productTemp->get_name());
                }
            } else {
                $temp_chaine = $this->decode_accents_ds($productTemp->get_name());
            }
            $data_youtube['titleVideo']=substr($temp_chaine, 0, 100);

            $description = $productTemp->get_description()."\r\n"
                            ."\r\n"
                            ."\r\n";
            if ($premiere_cat_produit!="") {
                $description .=$premiere_cat_produit."\r\n"
                            ."\r\n"
                            ."\r\n";
            }

            $description .="🔥🔥Acheter ".$this->decode_accents_ds($productTemp->get_name())." 🔥🔥"."\r\n"
                            .$this->siteName()." : ".get_permalink($product_id)."\r\n"
                            ."\r\n"
                            ."\r\n"
                            ."______________________________________________________";

            $data_youtube['summaryVideo']=substr($description, 0, 5000);

            $tags='#'.$this->capitalizeAndRemoveSpaces($this->decode_accents_ds($productTemp->get_name()));

            if ($premiere_cat_produit!="") {
                $tags.=', #'.$this->capitalizeAndRemoveSpaces($premiere_cat_produit);
            }
            $data_youtube['tagsVideo']=substr($tags, 0, 250);


            /*
            #[Nom du produit dont on supprime tous les espaces mais on met une majuscule la première lettre qui suivrait un espace supprimé]    et    #[Première catégorie du produit dont on supprime tous les espaces mais on met une majuscule la première lettre qui suivrait un espace supprimé]
            */
        }


        return $data_youtube;
    }

    public function first_category()
    {
        return $this->decode_accents_ds($terms[0]->name);
    }

    public function siteName()
    {
        return get_bloginfo('name');
    }

    public function siteLogo()
    {
        $sileIconUrl=DigitalSignage4_Tools::getModuleUrl()."Files/no.png";
		$siteIconPartPath=plugin_dir_path(__DIR__)."Files/no.png";
		$custom_logo_id = get_theme_mod('custom_logo'); // Récupère l'ID du logo
		$logo = wp_get_attachment_image_src($custom_logo_id, 'full'); // Récupère l'URL du logo
		if (has_custom_logo()) {
			$sileIconUrl = esc_url($logo[0]); // Retourne l'URL absolue du logo
			$logo_path = get_attached_file($custom_logo_id); // Récupère le chemin absolu du fichier local
			if ($logo_path) {
				//return $logo_path; // Retourne le chemin absolu en local
				return $sileIconUrl.";".$logo_path;
			}		
		}
		
		return $sileIconUrl.";".$siteIconPartPath;
		/*
		$sileIconUrl      = get_site_icon_url();

        //Prestashop
        //$siteIconPartPath = str_replace(get_site_url() , $_SERVER["DOCUMENT_ROOT"] . "/", $sileIconUrl);

        //WooCommerce
        $siteIconPartPath = str_replace(get_site_url(), ABSPATH, $sileIconUrl);

        $siteIconPartPath = str_replace('\\', '/', $siteIconPartPath);
        $siteIconPartPath = str_replace('//', '/', $siteIconPartPath);

        return $sileIconUrl.";".$siteIconPartPath;
		*/
		
    }

    public function watermarkPlacement()
    {
        $watermarkSettings = $this->ds4_caller->get_data(DigitalSignage4_caller::WATERMARK);
        if ($this->watermarkDataIsRight($watermarkSettings)) {
            return $watermarkSettings['watermark_place'];
        }

        return "";
    }

    public function watermarkPicture()
    {
        //$sileIconUrl      = DigitalSignage4_Tools::getModuleUrl()."Files/watermark.png";
		//$siteIconPartPath = plugin_dir_path(__DIR__)."Files/watermark.png";
		
		$upload_dir_global = wp_upload_dir();
		$siteIconPartPath =$upload_dir_global['basedir'] . '/' . 'ds4' . '/Files';
		
		$sileIconUrl      =$upload_dir_global['baseurl'] . '/' . 'ds4' . '/Files/watermark.png';
		
		if (!file_exists($siteIconPartPath)) {
			wp_mkdir_p($siteIconPartPath);
		}
		$siteIconPartPath .='/watermark.png';
		
		

        $siteIconPartPath = str_replace('\\', '/', $siteIconPartPath);
        $siteIconPartPath = str_replace('//', '/', $siteIconPartPath);
		

        return $sileIconUrl.";".$siteIconPartPath;
    }

    private function watermarkDataIsRight($watermarkSettings)
    {
        if ($watermarkSettings && isset($watermarkSettings['watermark_active']) && $watermarkSettings['watermark_active'] && isset($watermarkSettings['watermark_place'])) {
            $watermarkImage = DigitalSignage4_Tools::getModuleImgDir() . "watermark.png";
            if (file_exists($watermarkImage)) {
                return true;
            }
        }
        return false;
    }

    public function devise()
    {
        return DigitalSignage4_Tools::getWooCommerceDevice();
    }

    public function currency()
    {
        return $this->devise();
    }

    public function priceCurrencyAlign()
    {
        $priceFormat = $this->ds4_caller->get_data(DigitalSignage4_caller::PRIX_FORMAT);
        if ($priceFormat) {
            $priceFormat = intval($priceFormat);
            if (in_array($priceFormat, array( 0, 1, 2, 3, 4, 5, 6, 7 ))) {
                return -1; // symbole monetaire a gauche
            } elseif (in_array($priceFormat, array( 16, 17, 18 ))) {
                return 0; // symbole monetaire au milieux
            }
        }
        return 1; // symbole monetaire a droit
    }

    public function priceCentValign()
    {
        $priceFormat = $this->ds4_caller->get_data(DigitalSignage4_caller::PRIX_FORMAT);
        if ($priceFormat) {
            $priceFormat = intval($priceFormat);
            if (in_array($priceFormat, array( 1, 4, 6, 9, 12, 14, 17 ))) {
                return 1; // centime puissance haut
            } elseif (in_array($priceFormat, array( 2, 5, 7, 10, 13, 15, 18 ))) {
                return -1; // centime puissance bas
            }
        }
        return 0; // centime sans puissance
    }

    public function priceDecimalSeparator()
    {
        $priceFormat = $this->ds4_caller->get_data(DigitalSignage4_caller::PRIX_FORMAT);
        if ($priceFormat) {
            $priceFormat = intval($priceFormat);
            if (in_array($priceFormat, array( 6, 7, 14, 15, 16, 17, 18 ))) {
                return ""; // pas de separateur
            } elseif (in_array($priceFormat, array( 0, 1, 2, 8, 9, 10 ))) {
                return "."; // separateur point
            }
        }
        return ","; // separateur virgule
    }

    public function videoWidth()
    {
        $resolution = DigitalSignage4_caller::getInstance()->get_data(DigitalSignage4_caller::RESOLUTION);
        $resolutionsWH = explode("x", $resolution);
        return $resolutionsWH[0];
    }


    public function videoHeight()
    {
        $resolution = DigitalSignage4_caller::getInstance()->get_data(DigitalSignage4_caller::RESOLUTION);
        $resolutionsWH = explode("x", $resolution);
        return $resolutionsWH[1];
    }
}
