<?php

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

require_once __DIR__ . "/../../../Kernel/API/Entity/DigitalSignage4_CompteEntity.php";
require_once __DIR__ . "/../../../Kernel/API/Entity/DigitalSignage4_ForfaitEntity.php";
require_once __DIR__ . "/../../../Kernel/API/Linker/DigitalSignage4_API_Linker.php";
require_once __DIR__ . "/../../../Kernel/API/Linker/DigitalSignage4_CMS_Linker.php";
require_once __DIR__ . "/../../../Kernel/Translations/DigitalSignage4_Translate.php";
require_once "DigitalSignage4_Manager.php";

class DigitalSignage4_ForfaitManager extends DigitalSignage4_Manager
{
    // Singleton
    private static $instance = null;


    /**
     * @param $cms_linker
     *
     * @return DigitalSignage4_ForfaitManager|null
     * @throws DigitalSignage4_Exception
     */
    public static function instance()
    {
        if (self::$instance == null) {
            self::$instance = new DigitalSignage4_ForfaitManager();
        }

        return self::$instance;
    }

    // Variable du singleton

    /**
     * @var null | DigitalSignage4_ForfaitEntity
     */
    private $forfait = null;
    private $managerEntityName = "Forfait";


    /**
     * permet de set le forfait sans faire d'appel a l'api, par exemple depuis un instance sauvegardé dans une base de données
     *
     * @param $forfait
     */
    public function setForfait($forfait)
    {
        $this->forfait = $forfait;
    }

    /**
     * Requete qui renvois le forfait sqi ile st trouvé et l'enregistre dans son singleton
     *
     * @param $Token
     *
     * @return false|DigitalSignage4_ForfaitEntity false avec un mauvais token et une array avec un bon token
     */
    public function getForfait($token = null, $forceReset = false)
    {
        if ($forceReset) {
            $oldForfait = $this->forfait;
        }

        if ($this->forfait != null && ! $forceReset) {
            return $this->forfait;
        }

        if ($token) {
            try {
                $forfaits = DigitalSignage4_API_Linker::get_entitys($this->managerEntityName . "?token=" . $token, DigitalSignage4_ForfaitEntity::class);
            } catch (DigitalSignage4_Exception $e) {
                $e->echoError();
            }

            if ($forfaits && isset($forfaits[0])) {
                $this->forfait = $forfaits[0];
                $tempCompte    = new DigitalSignage4_CompteEntity();
                $this->forfait->setCompte($tempCompte->hydrate($this->forfait->getCompte()));

                return $this->forfait;
            } else {
                $this->addUserMessage(DigitalSignage4_Translate::getTraduction('aucun_resultat', strtolower($this->managerEntityName)));
            }
        } else {
            $this->addUserMessage(DigitalSignage4_Translate::getTraduction('champ_obligatoir', "token"));
        }

        if ($forceReset) {
            $this->forfait = $oldForfait;
        }

        return false;
    }

    public function getToken()
    {
        if ($this->forfait != null && !($this->forfait instanceof  __PHP_Incomplete_Class)) {
            return $this->forfait->getToken();
        }

        return null;
    }

    public function update_compteur_youtube_max($nb, $token = null)
    {
        try {
			DigitalSignage4_API_Linker::post($this->managerEntityName . "?update_compteur_youtube_max=update_compteur_youtube_max&nb=" . $nb."&token=".$token, array('a'=>'b'), '');
        } catch (DigitalSignage4_Exception $e) {
            $this->addUserMessage($e->getMessage());
        }
    }

    public function createForfaitTrial()
    {
        try {
            $domainSite = isset($_SERVER['SERVER_NAME'])?sanitize_text_field(wp_unslash($_SERVER['SERVER_NAME'])):"";
            $forfait_trial = DigitalSignage4_API_Linker::post($this->managerEntityName . "?trial=true&techno=Woo&site=" . $domainSite, array(), '');
            $forfait_trial_datas = $forfait_trial->getDatas();

            if ($forfait_trial_datas && isset($forfait_trial_datas[0])) {
                $this->forfait = ( new DigitalSignage4_ForfaitEntity() )->hydrate($forfait_trial_datas[0]);
                $this->forfait->setCompte(( new DigitalSignage4_CompteEntity() )->hydrate($this->forfait->getCompte()));
                return $this->forfait;
            }
        } catch (DigitalSignage4_Exception $e) {
            $this->addUserMessage($e->getMessage());
        }

        return false;
    }
}
