<?php

/**
 * Asthir functions and definitions
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package Asthir
 */

if (!defined('ASTHIR_VERSION')) {
	// Replace the version number of the theme on each release.
	$asthir_theme = wp_get_theme();
	define('ASTHIR_VERSION', $asthir_theme->get('Version'));
}

if (!function_exists('asthir_setup')) :
	/**
	 * Sets up theme defaults and registers support for various WordPress features.
	 *
	 * Note that this function is hooked into the after_setup_theme hook, which
	 * runs before the init hook. The init hook is too late for some features, such
	 * as indicating support for post thumbnails.
	 */
	function asthir_setup()
	{
		/*
		 * Make theme available for translation.
		 * Translations can be filed in the /languages/ directory.
		 * If you're building a theme based on Asthir, use a find and replace
		 * to change 'asthir' to the name of your theme in all the template files.
		 */
		load_theme_textdomain('asthir');

		// Add default posts and comments RSS feed links to head.
		add_theme_support('automatic-feed-links');

		/*
		 * Let WordPress manage the document title.
		 * By adding theme support, we declare that this theme does not use a
		 * hard-coded <title> tag in the document head, and expect WordPress to
		 * provide it for us.
		 */
		add_theme_support('title-tag');

		/*
		 * Enable support for Post Thumbnails on posts and pages.
		 *
		 * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/
		 */
		add_theme_support('post-thumbnails');

		// This theme uses wp_nav_menu() in one location.
		register_nav_menus(
			array(
				'top-menu' => esc_html__('Top Menu', 'asthir'),
				'menu-1' => esc_html__('Main Menu', 'asthir'),
			)
		);

		/*
		 * Switch default core markup for search form, comment form, and comments
		 * to output valid HTML5.
		 */
		add_theme_support(
			'html5',
			array(
				'search-form',
				'comment-form',
				'comment-list',
				'gallery',
				'caption',
				'style',
				'script',
			)
		);

		// Add support for Block Styles.
		add_theme_support('wp-block-styles');

		// Add support for full and wide align images.
		add_theme_support('align-wide');

		// Set up the WordPress core custom background feature.
		add_theme_support(
			'custom-background',
			apply_filters(
				'asthir_custom_background_args',
				array(
					'default-color' => 'ffffff',
					'default-image' => '',
				)
			)
		);
		if (!current_theme_supports('woocommerce')) {
			add_theme_support('woocommerce');
		}

		/**
		 * Add support for core custom logo.
		 *
		 * @link https://codex.wordpress.org/Theme_Logo
		 */
		add_theme_support(
			'custom-logo',
			array(
				'height'      => 250,
				'width'       => 250,
				'flex-width'  => true,
				'flex-height' => true,
			)
		);
	}
endif;
add_action('after_setup_theme', 'asthir_setup');

/**
 * Set the content width in pixels, based on the theme's design and stylesheet.
 *
 * Priority 0 to make it available to lower priority callbacks.
 *
 * @global int $content_width
 */
function asthir_content_width()
{
	// This variable is intended to be overruled from themes.
	// Open WPCS issue: {@link https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/1043}.
	// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound
	$GLOBALS['content_width'] = apply_filters('asthir_content_width', 1170);
}
add_action('after_setup_theme', 'asthir_content_width', 0);

/**
 * Register widget area.
 *
 * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar
 */
function asthir_widgets_init()
{
	register_sidebar(
		array(
			'name'          => esc_html__('Left Sidebar', 'asthir'),
			'id'            => 'sidebar-left',
			'description'   => esc_html__('Add widgets here for left sidebar.', 'asthir'),
			'before_widget' => '<section id="%1$s" class="widget %2$s">',
			'after_widget'  => '</section>',
			'before_title'  => '<h3 class="widget-title">',
			'after_title'   => '</h3>',
		)
	);
	register_sidebar(
		array(
			'name'          => esc_html__('Right Sidebar', 'asthir'),
			'id'            => 'sidebar-1',
			'description'   => esc_html__('Add widgets here for right sidebar.', 'asthir'),
			'before_widget' => '<section id="%1$s" class="widget %2$s">',
			'after_widget'  => '</section>',
			'before_title'  => '<h3 class="widget-title">',
			'after_title'   => '</h3>',
		)
	);
	register_sidebar(
		array(
			'name'          => esc_html__('Footer Widget', 'asthir'),
			'id'            => 'footer-widget',
			'description'   => esc_html__('Add Footer widgets here.', 'asthir'),
			'before_widget' => '<div class="col-lg-3"><div id="%1$s" class="widget %2$s">',
			'after_widget'  => '</div></div>',
			'before_title'  => '<h3 class="widget-title">',
			'after_title'   => '</h3>',
		)
	);
}
add_action('widgets_init', 'asthir_widgets_init');

function asthir_gb_block_style()
{

	wp_enqueue_style('asthir-gb-block', get_theme_file_uri('/assets/css/admin-block.css'), false, '1.0', 'all');
}
add_action('enqueue_block_assets', 'asthir_gb_block_style');

/**
 * Beshop Google fonts fuction
 */
if (!function_exists('asthir_body_fonts')) :
	function asthir_body_fonts()
	{
		$asthir_body_fonts = get_theme_mod('asthir_body_fonts', 'Poppins');
		$asthir_head_fonts = get_theme_mod('asthir_head_fonts', 'Lato');

		$fonts_url = '';

		$font_families = array();
		if ($asthir_body_fonts == $asthir_head_fonts) {
			$font_families[] = $asthir_body_fonts . ':300,400,500,600,700,800';
		} else {
			$font_families[] = $asthir_body_fonts . ':300,400,500,600,700,800';
			$font_families[] = $asthir_head_fonts . ':300,400,500,600,700,800';
		}

		$query_args = array(
			'family' => urlencode(implode('|', $font_families)),
			'subset' => urlencode('latin,latin-ext'),
		);
		$fonts_url = add_query_arg($query_args, 'https://fonts.googleapis.com/css');

		return esc_url_raw($fonts_url);
	}
endif;

/**
 * Enqueue scripts and styles.
 */
function asthir_scripts()
{
	wp_enqueue_style('asthir-google-font', asthir_body_fonts(), array(), null);
	wp_enqueue_style('asthir-default', get_template_directory_uri() . '/assets/css/default.css', array(), ASTHIR_VERSION, 'all');
	wp_enqueue_style('bootstrap', get_template_directory_uri() . '/assets/css/bootstrap.css', array(), '4.5.0', 'all');
	wp_enqueue_style('font-awesome-five-all', get_template_directory_uri() . '/assets/css/all.css', array(), '5.14.0', 'all');
	wp_enqueue_style('asthir-block-style', get_template_directory_uri() . '/assets/css/block.css', array(), '1.0');
	wp_enqueue_style('asthir-main', get_template_directory_uri() . '/assets/css/asthir-main.css', array(), ASTHIR_VERSION, 'all');
	wp_enqueue_style('asthir-accessibility', get_template_directory_uri() . '/assets/css/accessibility.css', array(), ASTHIR_VERSION, 'all');
	wp_enqueue_style('asthir-style', get_stylesheet_uri(), array(), ASTHIR_VERSION);

	wp_enqueue_script('bootstrap', get_template_directory_uri() . '/assets/js/bootstrap.js', array('jquery'), '4.5.0', true);
	wp_enqueue_script('asthir-mobile-menu', get_template_directory_uri() . '/assets/js/mobile-menu.js', array(), '1.0', true);
	wp_enqueue_script('asthir-scripts', get_template_directory_uri() . '/assets/js/scripts.js', array(), ASTHIR_VERSION, true);

	if (is_singular() && comments_open() && get_option('thread_comments')) {
		wp_enqueue_script('comment-reply');
	}
}
add_action('wp_enqueue_scripts', 'asthir_scripts');

/**
 * Implement the Custom Header feature.
 */
require get_template_directory() . '/inc/custom-header.php';

/**
 * Custom template tags for this theme.
 */
require get_template_directory() . '/inc/template-tags.php';

/**
 * Functions which enhance the theme by hooking into WordPress.
 */
require get_template_directory() . '/inc/template-functions.php';

/**
 * Customizer additions.
 */
require get_template_directory() . '/inc/class-walker-nav-menu.php';
require get_template_directory() . '/inc/class-asthir-walker-page.php';
/**
 * customizer
 */
require get_template_directory() . '/inc/customizer/customizer-helper.php';
require get_template_directory() . '/inc/customizer/customizer.php';
/**
 * Magical Plugin Activation
 */
require_once get_template_directory() . '/libs/magical-plugin-activation/class-magical-plugin-activation.php';
require get_template_directory() . '/inc/recommended-plugins.php';

/**
 * add inline style
 */
require get_template_directory() . '/inc/inline-style.php';
/**
 * header action
 */
require get_template_directory() . '/inc/header-action/header-style.php';
require get_template_directory() . '/inc/header-action/header-top.php';

/**
 * Load Jetpack compatibility file.
 */
if (defined('JETPACK__VERSION')) {
	require get_template_directory() . '/inc/jetpack.php';
}

/**
 * Load WooCommerce compatibility file.
 */
if (class_exists('WooCommerce')) {
	require get_template_directory() . '/inc/asthir-woocommerce.php';
}

/**
 * Filter the except length to 20 words.
 *
 * @param int $length Excerpt length.
 * @return int (Maybe) modified excerpt length.
 */
add_filter('excerpt_more', 'asthir_exerpt_empty_string', 999);
function asthir_exerpt_empty_string($more)
{
	if (is_admin()) {
		return $more;
	}
	return '';
}

/**
 * Accessibility Enhancements
 */

// Add keyboard navigation support for dropdowns
function asthir_accessibility_enhancements() {
	?>
	<script>
	document.addEventListener('DOMContentLoaded', function() {
		// Enhanced keyboard navigation for menus
		const menuItems = document.querySelectorAll('.main-navigation a, .main-navigation button');
		
		menuItems.forEach(item => {
			item.addEventListener('keydown', function(e) {
				const parentLi = this.closest('li');
				const submenu = parentLi ? parentLi.querySelector('ul') : null;
				
				switch(e.key) {
					case 'ArrowDown':
						if (submenu) {
							e.preventDefault();
							submenu.querySelector('a')?.focus();
						}
						break;
					case 'ArrowUp':
						e.preventDefault();
						const prevMenuItem = parentLi?.previousElementSibling?.querySelector('a');
						if (prevMenuItem) prevMenuItem.focus();
						break;
					case 'Escape':
						if (submenu) {
							e.preventDefault();
							this.focus();
							submenu.style.display = 'none';
						}
						break;
				}
			});
		});

		// Improve mobile menu accessibility
		const menuToggle = document.querySelector('.menu-toggle');
		const primaryMenu = document.getElementById('primary-menu');
		
		if (menuToggle && primaryMenu) {
			menuToggle.addEventListener('click', function() {
				const expanded = this.getAttribute('aria-expanded') === 'true';
				this.setAttribute('aria-expanded', !expanded);
				
				if (!expanded) {
					primaryMenu.querySelector('a')?.focus();
				}
			});
		}

		// Focus visible support for older browsers
		if (!CSS.supports('selector(:focus-visible)')) {
			document.addEventListener('keydown', function(e) {
				if (e.key === 'Tab') {
					document.documentElement.classList.add('js-focus-visible');
				}
			});
			
			document.addEventListener('click', function() {
				document.documentElement.classList.remove('js-focus-visible');
			});
		}
	});
	</script>
	<?php
}
add_action('wp_footer', 'asthir_accessibility_enhancements');

// Add proper alt text for post thumbnails
function asthir_post_thumbnail_alt($html, $post_id, $post_thumbnail_id, $size, $attr) {
	if (empty($attr['alt'])) {
		$alt_text = trim(strip_tags(get_post_meta($post_thumbnail_id, '_wp_attachment_image_alt', true)));
		if (empty($alt_text)) {
			$alt_text = get_the_title($post_id);
		}
		$html = str_replace('alt=""', 'alt="' . esc_attr($alt_text) . '"', $html);
	}
	return $html;
}
add_filter('post_thumbnail_html', 'asthir_post_thumbnail_alt', 10, 5);

// Improve search form accessibility
function asthir_search_form($form) {
		
	// Add aria-label if not present
	if (strpos($form, 'aria-label=') === false) {
		$form = str_replace('<form', '<form aria-label="' . esc_attr__('Search', 'asthir') . '"', $form);
	}
	
	// Add screen reader label for search input if not present
	if (strpos($form, 'screen-reader-text') === false && strpos($form, '<label') === false) {
		$form = str_replace('<input', '<label for="s" class="screen-reader-text">' . esc_html__('Search for:', 'asthir') . '</label><input id="s"', $form);
	}
	
	// Add ARIA attributes to search input if not present
	if (strpos($form, 'aria-required=') === false) {
		$form = str_replace('name="s"', 'name="s" aria-required="true"', $form);
	}
	
	// Add aria-label to submit button if not present
	if (strpos($form, 'type="submit"') !== false && strpos($form, 'aria-label=') === false) {
		$form = str_replace('type="submit"', 'type="submit" aria-label="' . esc_attr__('Submit search', 'asthir') . '"', $form);
	}
	
	return $form;
}
add_filter('get_search_form', 'asthir_search_form');

// Add landmark roles to widget areas
function asthir_widget_area_landmarks($params) {
	if ($params[0]['id'] === 'sidebar-1' || $params[0]['id'] === 'sidebar-left') {
		$params[0]['before_widget'] = str_replace('section', 'aside', $params[0]['before_widget']);
		$params[0]['after_widget'] = str_replace('section', 'aside', $params[0]['after_widget']);
		$params[0]['before_widget'] = str_replace('class="widget', 'role="complementary" class="widget', $params[0]['before_widget']);
	}
	return $params;
}
add_filter('dynamic_sidebar_params', 'asthir_widget_area_landmarks');

// Improve comment form accessibility
function asthir_comment_form_accessibility($defaults) {
	$defaults['title_reply_before'] = '<h3 id="reply-title" class="comment-reply-title">';
	$defaults['title_reply_after'] = '</h3>';
	$defaults['cancel_reply_before'] = '<small class="cancel-reply">';
	$defaults['cancel_reply_after'] = '</small>';
	
	global $commenter;
	
	$defaults['fields']['author'] = '<p class="comment-form-author">
		<label for="author">' . __('Name', 'asthir') . ' <span class="required">*</span></label>
		<input id="author" name="author" type="text" value="' . esc_attr($commenter['comment_author']) . '" size="30" maxlength="245" required="required" aria-required="true" />
	</p>';
	
	$defaults['fields']['email'] = '<p class="comment-form-email">
		<label for="email">' . __('Email', 'asthir') . ' <span class="required">*</span></label>
		<input id="email" name="email" type="email" value="' . esc_attr($commenter['comment_author_email']) . '" size="30" maxlength="100" required="required" aria-required="true" aria-describedby="email-notes" />
		<small id="email-notes">' . __('Your email address will not be published.', 'asthir') . '</small>
	</p>';
	
	$defaults['fields']['url'] = '<p class="comment-form-url">
		<label for="url">' . __('Website', 'asthir') . '</label>
		<input id="url" name="url" type="url" value="' . esc_attr($commenter['comment_author_url']) . '" size="30" maxlength="200" />
	</p>';
	
	$defaults['comment_field'] = '<p class="comment-form-comment">
		<label for="comment">' . __('Comment', 'asthir') . ' <span class="required">*</span></label>
		<textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required" aria-required="true" aria-describedby="form-allowed-tags"></textarea>
	</p>';
	
	return $defaults;
}
add_filter('comment_form_defaults', 'asthir_comment_form_accessibility');

// Add focus-within support for older browsers
function asthir_focus_within_polyfill() {
	?>
	<script>
	// Focus-within polyfill for older browsers
	if (!CSS.supports('selector(:focus-within)')) {
		document.addEventListener('focusin', function(e) {
			let target = e.target;
			while (target && target !== document) {
				target.classList.add('focus-within');
				target = target.parentNode;
			}
		});
		
		document.addEventListener('focusout', function(e) {
			let target = e.target;
			while (target && target !== document) {
				if (!target.contains(document.activeElement)) {
					target.classList.remove('focus-within');
				}
				target = target.parentNode;
			}
		});
	}
	</script>
	<?php
}
add_action('wp_footer', 'asthir_focus_within_polyfill');

/**
 * End Accessibility Enhancements
 */


require get_template_directory() . '/inc/info/class-customize.php';
if (is_admin()) {
	require_once trailingslashit(get_template_directory()) . 'inc/about/class.about.php';
	require_once trailingslashit(get_template_directory()) . 'inc/about/about.php';
}

/**
 * AI Marketing Expert success notice
 */
function asthir_ai_marketing_notice() {
	if (!is_plugin_active('ai-marketing-expert/ai-marketing-expert.php')) {
		return;
	}

	$user_id = get_current_user_id();
	$dismissed = get_user_meta($user_id, 'asthir_ai_notice_dismissed', true);
	if ($dismissed) {
		return;
	}

	if (isset($_GET['asthir_ai_dismiss']) && '1' === $_GET['asthir_ai_dismiss'] && wp_verify_nonce($_GET['asthir_ai_dismiss_nonce'] ?? '', 'asthir_ai_dismiss') ) {
		update_user_meta($user_id, 'asthir_ai_notice_dismissed', 1);
		return;
	}

	$has_woo = is_plugin_active('woocommerce/woocommerce.php');
	$message = $has_woo
		? __('Supercharge your sales and turn visitors into loyal customers — automatically. Built by WordPress experts, it\'s the smartest AI tool in your dashboard. We promise you\'ll be a fan!', 'asthir')
		: __('Attract more visitors, grow your audience, and keep them engaged — automatically. Built by WordPress experts, it\'s the smartest AI tool in your dashboard. We promise you\'ll be a fan!', 'asthir');
	?>
	<div class="notice notice-success is-dismissible" style="border-left-color:#2271b1; padding:16px 20px;">
		<p style="font-size:14px; margin:0 0 8px;">
			<strong style="color:#2271b1;"><?php esc_html_e('AI Marketing Expert', 'asthir'); ?></strong> &mdash;
			<?php esc_html_e('Now active on your site! — A must-have plugin in the current AI world.', 'asthir'); ?>
		</p>
		<p style="margin:0 0 12px; font-size:13px; line-height:1.6;">
			<?php echo esc_html($message); ?>
		</p>
		<p style="margin:0;">
			<a href="<?php echo esc_url(add_query_arg(array('asthir_ai_dismiss' => '1', 'asthir_ai_dismiss_nonce' => wp_create_nonce('asthir_ai_dismiss')))); ?>" class="button button-primary" style="font-weight:600;">
				<?php esc_html_e('Got it!', 'asthir'); ?>
			</a>
		</p>
	</div>
	<?php
}
add_action('admin_notices', 'asthir_ai_marketing_notice');
