<?php
/**
 * SMOF Interface
 *
 * @package     WordPress
 * @subpackage  SMOF
 * @since       1.4.0
 * @author      Syamil MJ
 */
if ( ! defined( 'ABSPATH' ) ) {
	exit; // Direct access not allowed.
}

/**
 * Admin Init
 *
 * @uses  wp_verify_nonce()
 * @uses  header()
 *
 * @since 1.0.0
 */
function optionsframework_admin_init() {
	// Rev up the Options Machine
	global $of_options, $options_machine, $smof_data, $smof_details;
	if ( ! isset( $options_machine ) ) {
		$options_machine = new Options_Machine( $of_options );
	}

	$smof_data = of_get_options();

	do_action( 'optionsframework_admin_init_before', array(
		'of_options'      => $of_options,
		'options_machine' => $options_machine,
		'smof_data'       => $smof_data
	) );
	if ( empty( $smof_data['smof_init'] ) ) { // Let's set the values if the theme's already been active
		of_save_options( $options_machine->Defaults );
		of_save_options( date( 'r' ), 'smof_init' );
		$smof_data       = of_get_options();
		$options_machine = new Options_Machine( $of_options );
	}

	do_action( 'optionsframework_admin_init_after', array(
		'of_options'      => $of_options,
		'options_machine' => $options_machine,
		'smof_data'       => $smof_data
	) );

}

/**
 * Create Options page
 *
 * @uses  add_theme_page()
 * @uses  add_action()
 *
 * @since 1.0.0
 */
function optionsframework_add_admin() {
	$theme_options_hook = 'toplevel_page_laborator_options';

	add_theme_page( 'Theme Options', 'Theme Options', 'manage_options', 'theme-options', 'kalium_null_function' );

	// Add framework functionaily to the head individually
	add_action( "admin_print_scripts-{$theme_options_hook}", 'of_load_only' );
	add_action( "admin_print_styles-{$theme_options_hook}", 'of_style_only' );

}


/**
 * Build Options page
 *
 * @since 1.0.0
 */
function optionsframework_options_page() {

}

/**
 * Create Options page
 *
 * @uses  wp_enqueue_style()
 *
 * @since 1.0.0
 */
function of_style_only() {
	kalium_enqueue( 'loaders-css' );
	kalium_enqueue( 'fontawesome-css' );
	wp_enqueue_style( 'admin-style', ADMIN_DIR . 'assets/css/admin-style.css', null, kalium()->get_version() );
	wp_enqueue_style( 'laborator-style', ADMIN_DIR . 'assets/css/laborator-smof.css', null, kalium()->get_version() );

	//wp_enqueue_style('color-picker', ADMIN_DIR . 'assets/css/colorpicker.css');
	wp_enqueue_style( 'jquery-ui-custom-admin', ADMIN_DIR . 'assets/css/jquery-ui-custom.css' );

	if ( ! wp_style_is( 'wp-color-picker', 'registered' ) ) {
		wp_register_style( 'wp-color-picker', ADMIN_DIR . 'assets/css/color-picker.min.css' );
	}
	wp_enqueue_style( 'wp-color-picker' );
	do_action( 'of_style_only_after' );
}

/**
 * Create Options page
 *
 * @uses  add_action()
 * @uses  wp_enqueue_script()
 *
 * @since 1.0.0
 */
function of_load_only() {
	//add_action('admin_head', 'smof_admin_head');

	wp_enqueue_script( 'jquery-ui-core' );
	wp_enqueue_script( 'jquery-ui-sortable' );
	wp_enqueue_script( 'jquery-ui-slider' );
	wp_enqueue_script( 'jquery-ui-mouse' );
	wp_enqueue_script( 'jquery-input-mask', ADMIN_DIR . 'assets/js/jquery.maskedinput.js', array( 'jquery' ) );
	wp_enqueue_script( 'tipsy', ADMIN_DIR . 'assets/js/jquery.tipsy.js', array( 'jquery' ) );
	//wp_enqueue_script('color-picker', ADMIN_DIR .'assets/js/colorpicker.js', array('jquery'));
	wp_enqueue_script( 'cookie', ADMIN_DIR . 'assets/js/cookie.js', 'jquery' );
	wp_enqueue_script( 'smof', ADMIN_DIR . 'assets/js/smof.js', array( 'jquery' ), kalium()->get_version() );
	wp_enqueue_script( 'wp-color-picker-alpha', ADMIN_DIR . 'assets/js/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), '1.2.2' );

	$color_picker_strings = array(
		'clear'            => 'Clear',
		'clearAriaLabel'   => 'Clear color',
		'defaultString'    => 'Default',
		'defaultAriaLabel' => 'Select default color',
		'pick'             => 'Select Color',
		'defaultLabel'     => 'Color value',
	);
	wp_localize_script( 'wp-color-picker-alpha', 'wpColorPickerL10n', $color_picker_strings );

	// Thickbox for version checks
	wp_enqueue_script( 'thickbox' );
	wp_enqueue_style( 'thickbox' );


	// Enqueue colorpicker scripts for versions below 3.5 for compatibility
	if ( ! wp_script_is( 'wp-color-picker', 'registered' ) ) {
		wp_register_script( 'iris', ADMIN_DIR . 'assets/js/iris.min.js', array(
			'jquery-ui-draggable',
			'jquery-ui-slider',
			'jquery-touch-punch'
		), false, 1 );
		wp_register_script( 'wp-color-picker', ADMIN_DIR . 'assets/js/color-picker.min.js', array( 'jquery', 'iris' ) );
	}
	wp_enqueue_script( 'wp-color-picker' );


	/**
	 * Enqueue scripts for file uploader
	 */

	if ( function_exists( 'wp_enqueue_media' ) ) {
		wp_enqueue_media();
	}

	do_action( 'of_load_only_after' );

}


/**
 * Ajax Save Options
 *
 * @uses  get_option()
 *
 * @since 1.0.0
 */
function of_ajax_callback() {
	global $options_machine, $of_options;

	$nonce = $_POST['security'];

	if ( ! wp_verify_nonce( $nonce, 'of_ajax_nonce' ) ) {
		die( '-1' );
	}

	//get options array from db
	$all = of_get_options();

	$save_type = $_POST['type'];

	//echo $_POST['data'];

	//Uploads
	if ( $save_type == 'upload' ) {

		$clickedID        = $_POST['data']; // Acts as the name
		$filename         = $_FILES[ $clickedID ];
		$filename['name'] = preg_replace( '/[^a-zA-Z0-9._\-]/', '', $filename['name'] );

		$override['test_form'] = false;
		$override['action']    = 'wp_handle_upload';
		$uploaded_file         = wp_handle_upload( $filename, $override );

		$upload_tracking[] = $clickedID;

		//update $options array w/ image URL
		$upload_image = $all; //preserve current data

		$upload_image[ $clickedID ] = $uploaded_file['url'];

		of_save_options( $upload_image );


		if ( ! empty( $uploaded_file['error'] ) ) {
			echo 'Upload Error: ' . $uploaded_file['error'];
		} else {
			echo $uploaded_file['url'];
		} // Is the Response

	} elseif ( $save_type == 'image_reset' ) {

		$id = $_POST['data']; // Acts as the name

		$delete_image        = $all; //preserve rest of data
		$delete_image[ $id ] = ''; //update array key with empty value
		of_save_options( $delete_image );

	} elseif ( $save_type == 'backup_options' ) {

		$backup               = $all;
		$backup['backup_log'] = date( 'r' );

		of_save_options( $backup, BACKUPS );

		die( '1' );
	} elseif ( $save_type == 'restore_options' ) {

		$smof_data = of_get_options( BACKUPS );

		of_save_options( $smof_data );

		die( '1' );
	} elseif ( $save_type == 'import_options' ) {


		$smof_data = unserialize( base64_decode( $_POST['data'] ) ); //100% safe - ignore theme check nag
		of_save_options( $smof_data );


		die( '1' );
	} elseif ( $save_type == 'save' ) {

		wp_parse_str( stripslashes( $_POST['data'] ), $smof_data );
		unset( $smof_data['security'] );
		unset( $smof_data['of_save'] );
		of_save_options( $smof_data );


		die( '1' );
	} elseif ( $save_type == 'reset' ) {
		of_save_options( $options_machine->Defaults );

		die( '1' ); //options reset
	}

	die();
}
