<?php

function page_optimize_settings_page() {
	?>
	<div class="wrap">
		<h1><?php _e( 'Performance Settings', page_optimize_get_text_domain() ); ?></h1>
		<form method="post" action="options.php">
			<?php
			settings_fields( 'performance' );
			do_settings_sections( 'page-optimize' );
			submit_button();
			?>
		</form>
	</div>
	<?php
}

function page_optimize_settings_section() {
	_e(
		'Concatenating JavaScript and CSS for faster site loading and lower number of requests. Scripts are grouped by the original placement.',
		page_optimize_get_text_domain()
	);
	echo '<br />';
	_e(
		'This plugin disables Jetpack "Speed up static file load times".',
		page_optimize_get_text_domain()
	);
}

function page_optimize_settings_field_js( $args ) {
	?>
	<fieldset>
		<label>
			<input type="checkbox" id="page_optimize-js" name="page_optimize-js" value="1" <?php checked( get_option( 'page_optimize-js' ) ); ?>>
			<?php _e( 'Concatenate scripts', page_optimize_get_text_domain() ); ?>
		</label>
		<br>
		<label for="page_optimize-js-exclude">
			<?php _e( 'Comma separated list of strings to exclude from JS concatenating:', page_optimize_get_text_domain() ); ?>
		</label>
		<br>
		<input type="text"
			id="page_optimize-js-exclude"
			name="page_optimize-js-exclude"
			value="<?php echo esc_html( get_option( 'page_optimize-js-exclude' ) ); ?>"
			class="regular-text ltr">
	</fieldset>
	<?php
}

function page_optimize_settings_field_js_load_mode( $args ) {
	?>
	<fieldset>
		<label>
			<input type="radio" name="page_optimize-load-mode" value="" <?php checked( '', get_option( 'page_optimize-load-mode' ), true ); ?>>
			<?php _e( 'None', page_optimize_get_text_domain() ); ?>
		</label>
		<label>
			<input type="radio" name="page_optimize-load-mode" value="async" <?php checked( 'async', get_option( 'page_optimize-load-mode' ), true ); ?>>
			<?php _e( 'Async', page_optimize_get_text_domain() ); ?>
		</label>
		<label>
			<input type="radio" name="page_optimize-load-mode" value="defer" <?php checked( 'defer', get_option( 'page_optimize-load-mode' ), true ); ?>>
			<?php _e( 'Defer', page_optimize_get_text_domain() ); ?>
		</label>

		<p class="description">
			<?php _e( 'You can choose the execution mode of the concatenated JavaScript. <strong>This option might break your site, so use carefully.</strong>', page_optimize_get_text_domain() ); ?>
		</p>
	</fieldset>
	<?php
}

function page_optimize_settings_field_css( $args ) {
	?>
	<fieldset>
		<label>
			<input type="checkbox" id="page_optimize-css" name="page_optimize-css" value="1" <?php checked( get_option( 'page_optimize-css' ) ); ?>>
			<?php _e( 'Concatenate styles', page_optimize_get_text_domain() ); ?>
		</label>
		<br>
		<label for="page_optimize-css-exclude">
			<?php _e( 'Comma separated list of strings to exclude from CSS concatenating:', page_optimize_get_text_domain() ); ?>
		</label>
		<br>
		<input type="text"
			id="page_optimize-css-exclude"
			name="page_optimize-css-exclude"
			value="<?php echo esc_html( get_option( 'page_optimize-css-exclude' ) ); ?>"
			class="regular-text ltr">
	</fieldset>
	<?php
}

function page_optimize_settings_add_menu() {
	add_options_page(
		__( 'Performance Settings', page_optimize_get_text_domain() ),
		__( 'Performance', page_optimize_get_text_domain() ),
		'manage_options',
		'page-optimize',
		'page_optimize_settings_page'
	);
}

add_action( 'admin_menu', 'page_optimize_settings_add_menu' );

function page_optimize_settings_init() {
	register_setting(
		'performance',
		'page_optimize-js',
		array(
			'description' => __( 'JavaScript concatenation', page_optimize_get_text_domain() ),
			'type' => 'boolean',
			'default' => page_optimize_js_default(),
		)
	);
	register_setting(
		'performance',
		'page_optimize-load-mode',
		array(
			'description' => __( 'Non-critical script execution mode', page_optimize_get_text_domain() ),
			'type' => 'string',
			'default' => page_optimize_js_load_mode_default(),
			'sanitize_callback' => 'page_optimize_sanitize_js_load_mode',
		)
	);
	register_setting(
		'performance',
		'page_optimize-js-exclude',
		array(
			'description' => __( 'Comma separated list of strings to exclude from JS concatenating', page_optimize_get_text_domain() ),
			'type' => 'string',
			'default' => implode( ',', page_optimize_js_exclude_list_default() ),
			'sanitize_callback' => 'page_optimize_sanitize_exclude_field',
		)
	);
	register_setting(
		'performance',
		'page_optimize-css',
		array(
			'description' => __( 'CSS concatenation', page_optimize_get_text_domain() ),
			'type' => 'boolean',
			'default' => page_optimize_css_default(),
		)
	);
	register_setting(
		'performance',
		'page_optimize-css-exclude',
		array(
			'description' => __( 'Comma separated list of strings to exclude from CSS concating', page_optimize_get_text_domain() ),
			'type' => 'string',
			'default' => implode( ',', page_optimize_css_exclude_list_default() ),
			'sanitize_callback' => 'page_optimize_sanitize_exclude_field',
		)
	);

	add_settings_section(
		'page_optimize_settings_section',
		__( 'Page Optimization', page_optimize_get_text_domain() ),
		'page_optimize_settings_section',
		'page-optimize'
	);
	add_settings_field(
		'page_optimize_js',
		__( 'JavaScript', page_optimize_get_text_domain() ),
		'page_optimize_settings_field_js',
		'page-optimize',
		'page_optimize_settings_section'
	);
	add_settings_field(
		'page_optimize_js_load_mode',
		__( 'Non-critical script execution mode (experimental)', page_optimize_get_text_domain() ),
		'page_optimize_settings_field_js_load_mode',
		'page-optimize',
		'page_optimize_settings_section'
	);
	add_settings_field(
		'page_optimize_css',
		__( 'CSS', page_optimize_get_text_domain() ),
		'page_optimize_settings_field_css',
		'page-optimize',
		'page_optimize_settings_section'
	);
}

add_action( 'admin_init', 'page_optimize_settings_init' );

function page_optimize_add_plugin_settings_link( $plugin_action_links, $plugin_file = null ) {
	if ( ! ( 'page-optimize/page-optimize.php' === $plugin_file && current_user_can( 'manage_options' ) ) ) {
		return $plugin_action_links;
	}

	$settings_link = sprintf(
		'<a href="options-general.php?page=page-optimize">%s</a>',
		__( 'Settings', page_optimize_get_text_domain() )
	);
	array_unshift( $plugin_action_links, $settings_link );

	return $plugin_action_links;
}

add_filter( 'plugin_action_links', 'page_optimize_add_plugin_settings_link', 10, 2 );