<?php

/**
 *  Main conferencia class to handle all functions for conferencias interaction for the API.
 * 
 *  This class uses the db.php files connection in PDO style and only returns SQL statements.
 * 
 *  @author XFATBoY (xfatboy@carpa.com)
 *  @since v1
 */
class Conferencia{
    
    private $conn;
    private $table_name = "wp_posts";
 
    public $id;
    public $name;
    public $description;
    public $price;
    public $category_id;
    public $category_name;
    public $created;
 
    /**
     *  Main constructor
     *  
     *  Initializes with the db
     */
    public function __construct($db){
        $this->conn = $db;
    }

    /**
     *  List function
     * 
     *  Displays the list of messages with it's pertinent variables
     * 
     */

    function list( $year, $month, $last_update, $text ){
        $sql = "SELECT  
                P.ID,   
                P.post_title AS title,
                P.post_date AS creation_date, 
                P.post_modified as last_updated,";
        if($text){
            $sql .= "P.post_content as content,";
        }
        $sql .= "LENGTH(P.post_content) as bodylength,
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.date,
                MD.activity AS no_activity,
                MD.city,
                MD.country, 
                MD.state, 
                PMA.meta_value AS thumbnail,
                PMAS.meta_value AS meta,
                P.post_name as slug
                FROM wp_posts P
                LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
                LEFT JOIN wp_postmeta PM ON PM.post_id =  P.ID AND PM.meta_key = '_thumbnail_id'
                LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
                LEFT JOIN wp_postmeta PMAS ON PM.meta_value = PMAS.post_id AND PMAS.meta_key = '_wp_attachment_metadata'
                WHERE P.post_type = 'conferencias'
                AND P.post_status = 'publish'";
                if($year!=''){
                    $sql .= " AND YEAR(MD.date) = '$year'";
                }
                if($month!=''){
                    $sql .= " AND MONTH(MD.date) = '$month'";
                }
                if($last_update!=''){
                    $sql .= " AND UNIX_TIMESTAMP(P.post_modified) > ". $last_update;
                }
                $sql .= " ORDER BY P.post_date DESC";
        return $this->execute_sql( $sql );
    }

    /**
     *  Detail function
     * 
     *  Given an ID returns the message with all details
     *  
     *  @param  id  Int id of the message whose details want to be found.
     */
    function detail($id){
        $sql = "SELECT
                P.ID,
                P.post_title AS title,
                P.post_content AS content,
                P.post_date AS creation_date,
                P.post_modified AS last_updated,
                P.guid,
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.date,
                MD.activity AS no_activity,
                MD.country, 
                MD.state, 
                MD.city,
                PMA.meta_value AS thumbnail,
                P.post_name as slug
                FROM wp_posts AS P
                LEFT JOIN wp_messagedata MD ON  P.ID = MD.post_id
                LEFT JOIN wp_postmeta PM ON PM.post_id =  P.ID AND PM.meta_key = '_thumbnail_id'
                LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
                WHERE P.ID = '$id'";
        return $this->execute_sql( $sql );
    }

    /**
     *  Last update function
     * 
     *  Returns the last updated imtestamp for the message passed in via the @id
     * 
     *  @param  id  Int id for whom the last update should be found
     */
    function last_update($id){
        $sql = "SELECT
                P.post_modified AS last_updated
                FROM wp_posts P
                WHERE P.ID = '$id'";
        return $this->execute_sql( $sql );
    }

    /**
     *  Execute SQL function
     * 
     *  Executes a generic SQL statement and passes back the result.
     * 
     *  @param  string sql SQl statement to be executed
     *  @return 
     */
    function execute_sql( $sql ){
        $stmt = $this->conn->prepare($sql);
        $stmt->execute();
        return $stmt;
    }

    /**
     *  Relevant conferences function
     * 
     *  Get all relevant conferences and return
     */
    function relevant_conferences(){
        $sql = "SELECT
                option_value
                FROM wp_options
                where option_name = 'options_conference'";
        return $this->execute_sql( $sql );
    }

    function get_post_source($trid){
        $sql = "SELECT
            T.element_id AS post_id
            FROM wp_icl_translations AS T
            WHERE T.trid = '$trid'
            AND T.language_code = 'es'";
        return $this->execute_sql( $sql );
    }
    
    function get_post_language($id){
        $sql = "SELECT
        T.language_code,
        T.trid
        FROM wp_icl_translations AS T
        WHERE T.element_id = '$id'
        AND T.element_type = 'post_message'";
        return $this->execute_sql( $sql );
    }
    
    function get_post_metadata($id){
        $sql = "SELECT
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.country, 
                MD.state, 
                MD.city AS city,
                MD.activity AS no_activity
                FROM wp_messagedata AS MD
                WHERE post_id = '$id'";
        return $this->execute_sql( $sql );
    }
    
    function get_post_files($id){
        global $wpdb;
        $sql = "SELECT
                MF.youtube,
                MF.livestream,
                MF.video,
                MF.audio,
                MF.audio_flac,
                MF.pdf,
                MF.pdf_simple
                FROM wp_messagefiles as MF
                WHERE MF.post_id = '$id'";
        return $this->execute_sql( $sql );
    }

    function title_search($q){
        $sql = "SELECT  
                P.ID,   
                P.post_title AS title,
                P.post_date AS creation_date, 
                P.post_modified as last_updated,
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.date,
                MD.activity AS no_activity,
                MD.city,
                MD.country, 
                MD.state, 
                PMA.meta_value AS thumbnail,
                P.post_name as slug
                FROM wp_posts P
                LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
                LEFT JOIN wp_postmeta PM ON PM.post_id =  P.ID AND PM.meta_key = '_thumbnail_id'
                LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
                WHERE P.post_type = 'conferencias'
                AND P.post_status = 'publish'
                AND P.post_title LIKE('%$q%')
                OR MD.city LIKE('%$q%')
                OR MD.state LIKE('%$q%')";
       return $this->execute_sql($sql);
            
    }

    function content_search($q){
        $sql = "SELECT  
                P.ID,   
                P.post_title AS title,
                P.post_date AS creation_date, 
                P.post_modified as last_updated,
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.date,
                MD.activity AS no_activity,
                MD.city,
                MD.country, 
                MD.state, 
                PMA.meta_value AS thumbnail,
                P.post_name as slug,
                MATCH(P.post_content) AGAINST ('$q' IN NATURAL LANGUAGE MODE) as score,
                SUBSTRING(P.post_content, LOCATE('$q', P.post_content) - 20, 300 + LENGTH('$q') + 300) as excerpt
                FROM wp_posts P
                LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
                LEFT JOIN wp_postmeta PM ON PM.post_id =  P.ID AND PM.meta_key = '_thumbnail_id'
                LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
                WHERE P.post_type = 'conferencias'
                AND P.post_status = 'publish'
                AND MATCH(P.post_content) AGAINST ('$q' IN NATURAL LANGUAGE MODE)
                ORDER BY score DESC";
        return $this->execute_sql($sql);
    }

    function country_summary(){
        $sql = "SELECT
        count( P.ID ) as total,
        MC.country_name as country,
        MC.country_code as country_code
        FROM `wp_posts` P
        INNER JOIN wp_messagedata MD ON MD.post_id = P.ID
        INNER JOIN wp_messagecountries MC ON MC.country_code = MD.country
        WHERE `post_status` = 'publish'
        AND `post_type` = 'conferencias'
        AND MC.language_code = 'es'
        GROUP BY country_code
        ORDER BY country;";
        return $this->execute_sql($sql);
    }

    function country_list($c){
        $sql = "SELECT  
                P.ID,   
                P.post_title AS title,
                P.post_date AS creation_date, 
                P.post_modified as last_updated,
                IFNULL(NULLIF(TIME_TO_SEC(MD.duration), '' ), 0) AS duration,
                MD.date,
                MD.activity AS no_activity,
                MD.city,
                MD.country, 
                MD.state, 
                PMA.meta_value AS thumbnail,
                P.post_name as slug
                FROM wp_posts P
                LEFT JOIN wp_messagedata MD ON P.id = MD.post_id
                LEFT JOIN wp_postmeta PM ON PM.post_id =  P.ID AND PM.meta_key = '_thumbnail_id'
                LEFT JOIN wp_postmeta PMA ON PM.meta_value = PMA.post_id AND PMA.meta_key = '_wp_attached_file'
                WHERE P.post_type = 'conferencias'
                AND P.post_status = 'publish'
                AND MD.country = '$c'
                ORDER BY MD.date DESC";
        return $this->execute_sql($sql);
    }
}