<?php
if( ! class_exists( 'AvadaThemeUpdater' ) ) {
    class AvadaThemeUpdater {
        var $api_url;
    	var $theme_id;
    	var $theme_slug;
    
        function __construct( $api_url, $theme_id, $theme_slug ) {
    		$this->api_url = $api_url;
    		$this->theme_id = $theme_id;
    		$this->theme_slug = $theme_slug;
    
    		add_filter( 'pre_set_site_transient_update_themes', array( &$this, 'check_for_update' ) );
    		
    		// This is for testing only!
    		//set_site_transient('update_themes', null);
    		
    		// Add notice that theme update is available
    		if( get_option( 'fusion_'. $this->theme_slug .'_update_available' ) ){
        		add_action( 'admin_notices', array(&$this, 'update_notice') );
    		}
    	}
    	
    	function check_for_update( $transient ) {
            global $wp_filesystem;
            $smof_data = of_get_options();

        	if( empty( $transient->checked ) )  {
                return $transient;
            }

        	$request_args = array(
    		    'id' => $this->theme_id,
    		    'slug' => $this->theme_slug,
    			'version' => $transient->checked[$this->theme_slug]
    		);

            if( $this->api_url == 'http://updates.theme-fusion.com/avada-theme.php' ) {
                $request_args['item_code'] = '2833226';
                $request_args['envato_username'] = $smof_data['tf_username'];
                $request_args['api_key'] = $smof_data['tf_api'];
            }

            $filename = trailingslashit( get_template_directory() ) . 'log.txt';            
    		$request_string = $this->prepare_request( 'theme_update', $request_args );
    		$raw_response = wp_remote_post( $this->api_url, $request_string );
        	
            $response = null;
    		if( ! is_wp_error( $raw_response ) && ( $raw_response['response']['code'] == 200 ) ) {
    			$response = json_decode( $raw_response['body'], true );
            }
    		
    		if( ! empty( $response ) ) { // Feed the update data into WP updater
    			$transient->response[$this->theme_slug] = $response;
            }

            /*$handle = fopen($filename, 'a');
            fwrite($handle, json_encode($request_string));
            fwrite($handle, json_encode($raw_response));*/

        	return $transient;
        }
        
        function prepare_request( $action, $args ) {
    		global $wp_version;
    		
    		return array(
    			'body' => array(
    				'action' => $action, 
    				'request' => json_encode($args),
    				'api-key' => md5(home_url())
    			),
    			'user-agent' => 'WordPress/'. $wp_version .'; '. home_url()
    		);	
    	}
    	
    	function update_notice() {
            global $pagenow;

            $theme_settings_link = admin_url( 'themes.php' );

            if ( $pagenow == 'themes.php' || $pagenow == 'update-core.php' ) {
                if( function_exists('wp_get_theme') ) {
                    $theme_name = '<strong>'. wp_get_theme() .'</strong>';
                }
                echo '<div class="updated">
                <p>' . __( 'There is an update available for the ' . $theme_name . ' theme.', 'Avada' ) . '</p>
                </div>';
            }
        }
    }
}