<?php
/**
 * menda Theme Customizer functionality
 *
 * @package WordPress
 * @subpackage menda
 * @since menda Theme 1.0
 */

/**
 * Sets up the WordPress core custom header and custom background features.
 *
 * @since menda Theme 1.0
 *
 * @see ebid_header_style()
 */
function ebid_custom_header_and_background() {
	$color_scheme             = ebid_get_color_scheme();
	$default_background_color = trim( $color_scheme[0], '#' );
	$default_text_color       = trim( $color_scheme[3], '#' );

	/**
	 * Filter the arguments used when adding 'custom-background' support in menda Theme.
	 *
	 * @since menda Theme 1.0
	 *
	 * @param array $args {
	 *     An array of custom-background support arguments.
	 *
	 *     @type string $default-color Default color of the background.
	 * }
	 */
	add_theme_support( 'custom-background', apply_filters( 'ebid_custom_background_args', array(
		'default-color' => $default_background_color,
	) ) );

	/**
	 * Filter the arguments used when adding 'custom-header' support in ebid Theme.
	 *
	 * @since ebid Theme 1.0
	 *
	 * @param array $args {
	 *     An array of custom-header support arguments.
	 *
	 *     @type string $default-text-color Default color of the header text.
	 *     @type int      $width            Width in pixels of the custom header image. Default 1200.
	 *     @type int      $height           Height in pixels of the custom header image. Default 280.
	 *     @type bool     $flex-height      Whether to allow flexible-height header images. Default true.
	 *     @type callable $wp-head-callback Callback function used to style the header image and text
	 *                                      displayed on the blog.
	 * }
	 */
	add_theme_support( 'custom-header', apply_filters( 'ebid_custom_header_args', array(
		'default-text-color'     => $default_text_color,
		'width'                  => 1200,
		'height'                 => 280,
		'flex-height'            => true,
		'wp-head-callback'       => 'ebid_header_style',
	) ) );
}
add_action( 'after_setup_theme', 'ebid_custom_header_and_background' );

if ( ! function_exists( 'ebid_header_style' ) ) :
/**
 * Styles the header text displayed on the site.
 *
 * Create your own ebid_header_style() function to override in a child theme.
 *
 * @since ebid Theme 1.0
 *
 * @see ebid_custom_header_and_background().
 */
function ebid_header_style() {
	// If the header text option is untouched, let's bail.
	if ( display_header_text() ) {
		return;
	}

	// If the header text has been hidden.
	?>
	
	<?php
}
endif; // ebid_header_style

/**
 * Adds postMessage support for site title and description for the Customizer.
 *
 * @since ebid Theme 1.0
 *
 * @param WP_Customize_Manager $wp_customize The Customizer object.
 */
function ebid_customize_register( $wp_customize ) {
	$color_scheme = ebid_get_color_scheme();

	$wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
	$wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';

	if ( isset( $wp_customize->selective_refresh ) ) {
		$wp_customize->selective_refresh->add_partial( 'blogname', array(
			'selector' => '.site-title a',
			'container_inclusive' => false,
			'render_callback' => 'ebid_customize_partial_blogname',
		) );
		$wp_customize->selective_refresh->add_partial( 'blogdescription', array(
			'selector' => '.site-description',
			'container_inclusive' => false,
			'render_callback' => 'ebid_customize_partial_blogdescription',
		) );
	}

	// Add color scheme setting and control.
	$wp_customize->add_setting( 'color_scheme', array(
		'default'           => 'default',
		'sanitize_callback' => 'ebid_sanitize_color_scheme',
		'transport'         => 'postMessage',
	) );

	$wp_customize->add_control( 'color_scheme', array(
		'label'    => __( 'Base Color Scheme', 'menda' ),
		'section'  => 'colors',
		'type'     => 'select',
		'choices'  => ebid_get_color_scheme_choices(),
		'priority' => 1,
	) );

	// Add page background color setting and control.
	$wp_customize->add_setting( 'page_background_color', array(
		'default'           => $color_scheme[1],
		'sanitize_callback' => 'sanitize_hex_color',
		'transport'         => 'postMessage',
	) );

	$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'page_background_color', array(
		'label'       => __( 'Page Background Color', 'menda' ),
		'section'     => 'colors',
	) ) );

	// Remove the core header textcolor control, as it shares the main text color.
	$wp_customize->remove_control( 'header_textcolor' );

	// Add link color setting and control.
	$wp_customize->add_setting( 'link_color', array(
		'default'           => $color_scheme[2],
		'sanitize_callback' => 'sanitize_hex_color',
		'transport'         => 'postMessage',
	) );

	$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'link_color', array(
		'label'       => __( 'Link Color', 'menda' ),
		'section'     => 'colors',
	) ) );

	// Add main text color setting and control.
	$wp_customize->add_setting( 'main_text_color', array(
		'default'           => $color_scheme[3],
		'sanitize_callback' => 'sanitize_hex_color',
		'transport'         => 'postMessage',
	) );

	$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'main_text_color', array(
		'label'       => __( 'Main Text Color', 'menda' ),
		'section'     => 'colors',
	) ) );

	// Add secondary text color setting and control.
	$wp_customize->add_setting( 'secondary_text_color', array(
		'default'           => $color_scheme[4],
		'sanitize_callback' => 'sanitize_hex_color',
		'transport'         => 'postMessage',
	) );

	$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'secondary_text_color', array(
		'label'       => __( 'Secondary Text Color', 'menda' ),
		'section'     => 'colors',
	) ) );
}
add_action( 'customize_register', 'ebid_customize_register', 11 );

/**
 * Render the site title for the selective refresh partial.
 *
 * @since menda Theme 1.2
 * @see ebid_customize_register()
 *
 * @return void
 */
function ebid_customize_partial_blogname() {
	bloginfo( 'name' );
}

/**
 * Render the site tagline for the selective refresh partial.
 *
 * @since menda Theme 1.2
 * @see ebid_customize_register()
 *
 * @return void
 */
function ebid_customize_partial_blogdescription() {
	bloginfo( 'description' );
}

/**
 * Registers color schemes for ebid Theme.
 *
 * Can be filtered with {@see 'ebid_color_schemes'}.
 *
 * The order of colors in a colors array:
 * 1. Main Background Color.
 * 2. Page Background Color.
 * 3. Link Color.
 * 4. Main Text Color.
 * 5. Secondary Text Color.
 *
 * @since ebid Theme 1.0
 *
 * @return array An associative array of color scheme options.
 */
function ebid_get_color_schemes() {
	/**
	 * Filter the color schemes registered for use with ebid Theme.
	 *
	 * The default schemes include 'default', 'dark', 'gray', 'red', and 'yellow'.
	 *
	 * @since ebid Theme 1.0
	 *
	 * @param array $schemes {
	 *     Associative array of color schemes data.
	 *
	 *     @type array $slug {
	 *         Associative array of information for setting up the color scheme.
	 *
	 *         @type string $label  Color scheme label.
	 *         @type array  $colors HEX codes for default colors prepended with a hash symbol ('#').
	 *                              Colors are defined in the following order: Main background, page
	 *                              background, link, main text, secondary text.
	 *     }
	 * }
	 */
	return apply_filters( 'ebid_color_schemes', array(
		'default' => array(
			'label'  => __( 'Default', 'menda' ),
			'colors' => array(
				'#1a1a1a',
				'#ffffff',
				'#007acc',
				'#1a1a1a',
				'#686868',
			),
		),
		'dark' => array(
			'label'  => __( 'Dark', 'menda' ),
			'colors' => array(
				'#262626',
				'#1a1a1a',
				'#9adffd',
				'#e5e5e5',
				'#c1c1c1',
			),
		),
		'gray' => array(
			'label'  => __( 'Gray', 'menda' ),
			'colors' => array(
				'#616a73',
				'#4d545c',
				'#c7c7c7',
				'#f2f2f2',
				'#f2f2f2',
			),
		),
		'red' => array(
			'label'  => __( 'Red', 'menda' ),
			'colors' => array(
				'#ffffff',
				'#ff675f',
				'#640c1f',
				'#402b30',
				'#402b30',
			),
		),
		'yellow' => array(
			'label'  => __( 'Yellow', 'menda' ),
			'colors' => array(
				'#3b3721',
				'#ffef8e',
				'#774e24',
				'#3b3721',
				'#5b4d3e',
			),
		),
	) );
}

if ( ! function_exists( 'ebid_get_color_scheme' ) ) :
/**
 * Retrieves the current ebid Theme color scheme.
 *
 * Create your own ebid_get_color_scheme() function to override in a child theme.
 *
 * @since ebid Theme 1.0
 *
 * @return array An associative array of either the current or default color scheme HEX values.
 */
function ebid_get_color_scheme() {
	$color_scheme_option = get_theme_mod( 'color_scheme', 'default' );
	$color_schemes       = ebid_get_color_schemes();

	if ( array_key_exists( $color_scheme_option, $color_schemes ) ) {
		return $color_schemes[ $color_scheme_option ]['colors'];
	}

	return $color_schemes['default']['colors'];
}
endif; // ebid_get_color_scheme

if ( ! function_exists( 'ebid_get_color_scheme_choices' ) ) :
/**
 * Retrieves an array of color scheme choices registered for ebid Theme.
 *
 * Create your own ebid_get_color_scheme_choices() function to override
 * in a child theme.
 *
 * @since ebid Theme 1.0
 *
 * @return array Array of color schemes.
 */
function ebid_get_color_scheme_choices() {
	$color_schemes                = ebid_get_color_schemes();
	$color_scheme_control_options = array();

	foreach ( $color_schemes as $color_scheme => $value ) {
		$color_scheme_control_options[ $color_scheme ] = $value['label'];
	}

	return $color_scheme_control_options;
}
endif; // ebid_get_color_scheme_choices


if ( ! function_exists( 'ebid_sanitize_color_scheme' ) ) :
/**
 * Handles sanitization for ebid Theme color schemes.
 *
 * Create your own ebid_sanitize_color_scheme() function to override
 * in a child theme.
 *
 * @since menda Theme 1.0
 *
 * @param string $value Color scheme name value.
 * @return string Color scheme name.
 */
function ebid_sanitize_color_scheme( $value ) {
	$color_schemes = ebid_get_color_scheme_choices();

	if ( ! array_key_exists( $value, $color_schemes ) ) {
		return 'default';
	}

	return $value;
}
endif; // ebid_sanitize_color_scheme

/**
 * Enqueues front-end CSS for color scheme.
 *
 * @since menda Theme 1.0
 *
 * @see wp_add_inline_style()
 */
function ebid_color_scheme_css() {
	$color_scheme_option = get_theme_mod( 'color_scheme', 'default' );

	// Don't do anything if the default color scheme is selected.
	if ( 'default' === $color_scheme_option ) {
		return;
	}

	$color_scheme = ebid_get_color_scheme();

	// Convert main text hex color to rgba.
	$color_textcolor_rgb = ebid_hex2rgb( $color_scheme[3] );

	// If the rgba values are empty return early.
	if ( empty( $color_textcolor_rgb ) ) {
		return;
	}

	// If we get this far, we have a custom color scheme.
	$colors = array(
		'background_color'      => $color_scheme[0],
		'page_background_color' => $color_scheme[1],
		'link_color'            => $color_scheme[2],
		'main_text_color'       => $color_scheme[3],
		'secondary_text_color'  => $color_scheme[4],
		'border_color'          => vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.2)', $color_textcolor_rgb ),

	);

	$color_scheme_css = ebid_get_color_scheme_css( $colors );

	wp_add_inline_style( 'ebid-style', $color_scheme_css );
}
add_action( 'wp_enqueue_scripts', 'ebid_color_scheme_css' );

/**
 * Binds the JS listener to make Customizer color_scheme control.
 *
 * Passes color scheme data as colorScheme global.
 *
 * @since menda Theme 1.0
 */
function ebid_customize_control_js() {
	wp_enqueue_script( 'color-scheme-control', get_template_directory_uri() . '/js/color-scheme-control.js', array( 'customize-controls', 'iris', 'underscore', 'wp-util' ), '20160412', true );
	wp_localize_script( 'color-scheme-control', 'colorScheme', ebid_get_color_schemes() );
}
add_action( 'customize_controls_enqueue_scripts', 'ebid_customize_control_js' );

/**
 * Binds JS handlers to make the Customizer preview reload changes asynchronously.
 *
 * @since menda Theme 1.0
 */
function ebid_customize_preview_js() {
	wp_enqueue_script( 'ebid-customize-preview', get_template_directory_uri() . '/js/customize-preview.js', array( 'customize-preview' ), '20160412', true );
}
add_action( 'customize_preview_init', 'ebid_customize_preview_js' );

/**
 * Returns CSS for the color schemes.
 *
 * @since menda Theme 1.0
 *
 * @param array $colors Color scheme colors.
 * @return string Color scheme CSS.
 */