<?php

class ConversationEngine {

    /*
    ============================================
    INICIAR MEMORIA
    ============================================
    */

    public static function init(){

        if(!isset($_SESSION['ai_memory'])){

            $_SESSION['ai_memory'] = [

                'last_topic'      => null,
                'last_product'    => null,
                'last_intent'     => null,
                'last_question'   => null,
                'conversation'    => []

            ];
        }
    }

    /*
    ============================================
    GUARDAR MENSAJE
    ============================================
    */

    public static function remember($question){

        self::init();

        $_SESSION['ai_memory']['last_question']
        = $question;

        $_SESSION['ai_memory']['conversation'][]
        = [

            'question' => $question,
            'time'     => time()

        ];

        /*
        LIMITAR MEMORIA
        */

        if(
            count($_SESSION['ai_memory']['conversation']) > 15
        ){

            array_shift(
                $_SESSION['ai_memory']['conversation']
            );
        }
    }

    /*
    ============================================
    GUARDAR CONTEXTO
    ============================================
    */

    public static function setContext(
        $intent,
        $product,
        $topic
    ){

        self::init();

        $_SESSION['ai_memory']['last_intent']
        = $intent;

        $_SESSION['ai_memory']['last_product']
        = $product;

        $_SESSION['ai_memory']['last_topic']
        = $topic;
    }

    /*
    ============================================
    OBTENER CONTEXTO
    ============================================
    */

    public static function getContext(){

        self::init();

        return $_SESSION['ai_memory'];
    }

    /*
    ============================================
    DETECTAR CONTINUACIÓN
    ============================================
    */

    public static function isContinuation($question){

        $question = strtolower(trim($question));

        $continuations = [

            'y',
            'y?',
            'tambien',
            'también',
            'sin permanencia',
            'con permanencia',
            'cuanto',
            'cuánto',
            'precio',
            'vale',
            'ok',
            'perfecto',
            'y el gas',
            'y luz',
            'dual',
            'otra',
            'más',
            'mas'

        ];

        foreach($continuations as $c){

            if(
                strpos($question, $c) !== false
            ){
                return true;
            }
        }

        return false;
    }

    /*
    ============================================
    RECUPERAR PRODUCTO
    ============================================
    */

    public static function recoverProduct($question){

        self::init();

        $memory =
        $_SESSION['ai_memory'];

        /*
        SI YA MENCIONA PRODUCTO
        */

        if(
            strpos($question, 'luz') !== false
        ){
            return 'luz';
        }

        if(
            strpos($question, 'gas') !== false
        ){
            return 'gas';
        }

        /*
        RECUPERAR MEMORIA
        */

        if(
            self::isContinuation($question)
            &&
            !empty($memory['last_product'])
        ){

            return $memory['last_product'];
        }

        return null;
    }

    /*
    ============================================
    RECUPERAR INTENCIÓN
    ============================================
    */

    public static function recoverIntent($question){

        self::init();

        $memory =
        $_SESSION['ai_memory'];

        $q = strtolower($question);

        if(
            strpos($q, 'precio') !== false
            ||
            strpos($q, 'tarifa') !== false
        ){
            return 'pricing';
        }

        if(
            strpos($q, 'promoc') !== false
        ){
            return 'promotion';
        }

        if(
            strpos($q, 'permanencia') !== false
        ){
            return 'permanence';
        }

        if(
            self::isContinuation($question)
            &&
            !empty($memory['last_intent'])
        ){

            return $memory['last_intent'];
        }

        return 'general';
    }

    /*
    ============================================
    GENERAR RESPUESTA HUMANA
    ============================================
    */

    public static function conversationalIntro(
        $intent,
        $product
    ){

        /*
        PRICING
        */

        if($intent == 'pricing'){

            if($product == 'luz'){

                return "
                💡 Claro.
                Estuve revisando las tarifas
                de luz disponibles y encontré
                varias opciones interesantes.
                ";
            }

            if($product == 'gas'){

                return "
                🔥 Claro.
                Encontré información relacionada
                con tarifas de gas.
                ";
            }

            return "
            💡 Encontré información de precios
            que podría ayudarte.
            ";
        }

        /*
        PROMOCIONES
        */

        if($intent == 'promotion'){

            return "
            🚀 Encontré promociones activas
            bastante interesantes.
            ";
        }

        /*
        PERMANENCIA
        */

        if($intent == 'permanence'){

            return "
            📄 Encontré información relacionada
            con permanencias y condiciones.
            ";
        }

        /*
        GENERAL
        */

        return "
        🤖 Encontré información que puede ayudarte.
        ";
    }

}
?>