<?php

/**
 * Global and Local Hooks for the Achievements plugin
 * Global Hooks are defined with the prefix(name of the plugin)
 * Local Hooks are defined with normal function name 
 * 
 * All the Global Hooks are called during the page load
 * and Local Hooks are called according to conditions
 * 
 * Here, we request to the Achievements url using REST 
 * to get the contents and will display with this plugin.
 * 
 * @author shubham meena mentored by Matthew Lagoe 
 */


// Global variable to store the data which is
// returned to the templates
$return_set = array();

// Local variable to store data during
// functionalities of the hooks
$var_set = array();

/**
 * Display hook for Achievements plugin
 */
function achievements_hook_display()
 {
    global $return_set;
     // to display plugin name in menu bar
    $return_set['menu_display'] = 'Achievements';
    $return_set['icon'] = 'icon-certificate';
     } 

/**
 * Local Hook to get database content
 * which is called by the global hook 
 * by passing a parameter
 * 
 * This hook returns the api keys registerd with 
 * the logged in user
 * 
 * @param  $data array with respective information
 * @return $row extracted db content wrt $data
 */
function hook_get_db_content( $data )
 {
    $db = new DBLayer( 'lib' );
     $sth = $db -> select( 'ams_api_keys', $data , 'User = :User AND UserCharacter = :UserCharacter' );
     $row = $sth -> fetchAll();
     return $row;
     } 

/**
 * Local Hook to get database content
 * which is called by the global hook 
 * by passing a parameter
 * 
 * This hook returns the id of the character 
 * whose achivements we have to get
 * 
 * @param  $data array with respective information
 * @return $row extracted db content wrt $data
 */
function hook_get_char_id( $data )
 {
    // returns the character id with respect to the character name  in the ring_tool->characters
    $db = new DBLayer( 'ring' );
     $sth = $db -> selectWithParameter( 'char_id', 'characters' , array( 'char_name' => $data ), 'char_name=:char_name' );
     $row = $sth -> fetch();
     return $row['char_id'];
     } 

/**
 * Local Hook to get database content
 * which is called by the global hook 
 * by passing a parameter
 * 
 * Hook to get the player stats of the character
 * 
 * @param  $data array with respective information
 * @return $row extracted db content wrt $data
 */
function hook_get_player_stat( $data )
 {
    // returns the character id with respect to the character name  in the ring_tool->characters
    $db = new DBLayer( 'webig' );
     $sth = $db -> select( 'players' , array( 'name' => $data ), 'name=:name' );
     $row = $sth -> fetch();
     return $row;
     } 

/**
 * Local Hook to set variables which contains
 * the content to use during the plugin functionality.
 */
function hook_variable_set()
 {
    global $return_set;
     global $var_set;
     if ( isset( $_POST['Character'] ) && !empty( $_POST['Character'] ) )
         {
        $var_set['character'] = $_POST['Character'];
        
         // get char id from ring_open table
        if ( $var_set['character'] != 'All Characters' )
         {
            $var_set['char_id'] = hook_get_char_id( $var_set['character'] );
            
             } 
        
        // get db content for variable set
        $row = hook_get_db_content( array( 'User' => $_SESSION['user'], 'UserCharacter' => $var_set['character'] ) );
        
         // access key automatically taken from the database wrt user and character
        @$var_set['app_key'] = $row['AccessToken'];
        
         // here you can set the host where this plugin is set
        $var_set['host'] = 'localhost';
        
         // here we get the stats of the character
        $ref_set = hook_get_player_stat( $var_set['character'] );
        
         // here we have set items that are required to get the achivements
        // these are player stats from webig->players table
        @$var_set['items'] = json_encode( array( 'dev_shard' => $ref_set['dev_shard'] , 'name' => $ref_set['name'] , 'cid' => $ref_set['cid'] , 'lang' => 'en' , 'translater_mode' => '', 'last_played_date' => $ref_set['last_login'] ) );
        
         // url where we have to make request for achievements
        // it sends get parameter search(what to search) and format(in which format data exchange takes place)
        $var_set['url'] = 'http://localhost6/?search=achievements&&format=json';
         } 
    else
         {
        $return_set['no_char'] = "Please Generate key for a character before requesting for achievements";
         } 
    } 

/**
 * Global Hook to interact with the REST api
 * Pass the variables in the REST object to 
 * make request 
 * 
 * variables REST object expects
 * url --> on which request is to be made
 * appkey --> app key for authentication
 * host --> host from which request have been sent
 * 
 * @return $return_set global array returns the template data
 */
function achievements_hook_call_rest()
 {
    // defined the variables
    global $var_set;
     global $return_set;
    
     if ( isset( $_POST['get_data'] ) )
         {
        hook_variable_set();
         // here we make the REST connection
        $rest_api = new Rest_Api();
         $ach_data = $rest_api -> request( $var_set['url'], $var_set['app_key'], $var_set['host'], $var_set['items'] );
         // here we store the response we get from the server
        $return_set['char_achievements'] = $ach_data ;
         } 
    } 

/**
 * Global Hook to return global variables which contains
 * the content to use in the smarty templates extracted from 
 * the database
 * 
 * @return $return_set global array returns the template data
 */
function achievements_hook_get_db()
 {
    global $return_set;
    
     if ( isset( $_SESSION['user'] ) )
         {
        $db = new DBLayer( 'lib' );
        
         // getting content for selecting characters
        $sth = $db -> selectWithParameter( 'UserCharacter', 'ams_api_keys', array( 'User' => $_SESSION['user'] ) , 'User = :User' );
         $row = $sth -> fetch();
         $return_set['Character'] = $row;
         } 
    } 

/**
 * Global Hook to return global variables which contains
 * the content to use in the smarty templates
 * 
 * @return $return_set global array returns the template data
 */
function achievements_hook_return_global()
 {
    global $return_set;
     return $return_set;
     }