<?php

/**
 * Function to register control and setting
 */
function costello_register_option( $wp_customize, $option ) {

	// Initialize Setting.
	$wp_customize->add_setting( $option['name'], array(
		'sanitize_callback'  => $option['sanitize_callback'],
		'default'            => isset( $option['default'] ) ? $option['default'] : '',
		'transport'          => isset( $option['transport'] ) ? $option['transport'] : 'refresh',
		'theme_supports'     => isset( $option['theme_supports'] ) ? $option['theme_supports'] : '',
		'description_hidden' => isset( $option['description_hidden'] ) ? $option['description_hidden'] : 0,
	) );

	$control = array(
		'label'    => $option['label'],
		'section'  => $option['section'],
		'settings' => $option['name'],
	);

	if ( isset( $option['active_callback'] ) ) {
		$control['active_callback'] = $option['active_callback'];
	}

	if ( isset( $option['priority'] ) ) {
		$control['priority'] = $option['priority'];
	}

	if ( isset( $option['choices'] ) ) {
		$control['choices'] = $option['choices'];
	}

	if ( isset( $option['type'] ) ) {
		$control['type'] = $option['type'];
	}

	if ( isset( $option['input_attrs'] ) ) {
		$control['input_attrs'] = $option['input_attrs'];
	}

	if ( isset( $option['description'] ) ) {
		$control['description'] = $option['description'];
	}

	if ( isset( $option['custom_control'] ) ) {
		$wp_customize->add_control( new $option['custom_control']( $wp_customize, $option['name'], $control ) );
	} else {
		$wp_customize->add_control( $option['name'], $control );
	}
}

/**
 * Alphabetically sort theme options sections
 *
 * @param  wp_customize object $wp_customize wp_customize object.
 */
function costello_sort_sections_list( $wp_customize ) {
	foreach ( $wp_customize->sections() as $section_key => $section_object ) {
		if ( false !== strpos( $section_key, 'costello_' ) && 'costello_important_links' !== $section_key ) {
			$options[] = $section_key;
		}
	}

	sort( $options );

	$priority = 1;
	foreach ( $options as  $option ) {
		$wp_customize->get_section( $option )->priority = $priority++;
	}
}
add_action( 'customize_register', 'costello_sort_sections_list', 99 );

/**
 * Returns an array of visibility options for featured sections
 *
 * @since 1.0.0
 */
function costello_section_visibility_options() {
	$options = array(
		'homepage'    => esc_html__( 'Homepage / Frontpage', 'costello' ),
		'entire-site' => esc_html__( 'Entire Site', 'costello' ),
		'disabled'    => esc_html__( 'Disabled', 'costello' ),
	);

	return apply_filters( 'costello_section_visibility_options', $options );
}

/**
 * Returns an array of featured content options
 *
 * @since 1.0.0
 */
function costello_sections_layout_options() {
	$options = array(
		'layout-one'   => esc_html__( '1 column', 'costello' ),
		'layout-two'   => esc_html__( '2 columns', 'costello' ),
		'layout-three' => esc_html__( '3 columns', 'costello' ),
		'layout-four'  => esc_html__( '4 columns', 'costello' ),
	);

	return apply_filters( 'costello_sections_layout_options', $options );
}

/**
 * Returns an array of section types
 *
 * @since 1.0.0
 */
function costello_section_type_options() {
	$options = array(
		'post'     => esc_html__( 'Post', 'costello' ),
		'page'     => esc_html__( 'Page', 'costello' ),
		'category' => esc_html__( 'Category', 'costello' ),
		'custom'   => esc_html__( 'Custom', 'costello' ),
	);

	return apply_filters( 'costello_section_type_options', $options );
}

/**
 * Returns an array of color schemes registered for catchresponsive.
 *
 * @since 1.0.0
 */
function costello_get_pagination_types() {
	$pagination_types = array(
		'default' => esc_html__( 'Default(Older Posts/Newer Posts)', 'costello' ),
		'numeric' => esc_html__( 'Numeric', 'costello' ),
	);

	return apply_filters( 'costello_get_pagination_types', $pagination_types );
}

/**
 * Generate a list of all available post array
 *
 * @param  string $post_type post type.
 * @return post_array
 */
function costello_generate_post_array( $post_type = 'post' ) {
	$output = array();
	$posts = get_posts( array(
		'post_type'        => $post_type,
		'post_status'      => 'publish',
		'suppress_filters' => false,
		'posts_per_page'   => -1,
		)
	);

	$output['0']= esc_html__( '-- Select --', 'costello' );

	foreach ( $posts as $post ) {
		$output[ $post->ID ] = ! empty( $post->post_title ) ? $post->post_title : sprintf( __( '#%d (no title)', 'costello' ), $post->ID );
	}

	return $output;
}
