<?php
/**
 * Class for footer widgets.
 *
 * @package tour_travel_package
 */

/**
 * Footer Widgets class.
 *
 * @since 1.0.0
 */
class Tour_Travel_Package_Footer_Widgets {

	/**
	 * Number of maximum registered widgets.
	 *
	 * @since 1.0.0
	 *
	 * @access protected
	 * @var int
	 */
	protected $max_widgets = 0;

	/**
	 * Number of active widgets.
	 *
	 * @since 1.0.0
	 *
	 * @access protected
	 * @var int
	 */
	protected $active_widgets = 0;

	/**
	 * Prefix to apply hook.
	 *
	 * @since 1.0.0
	 *
	 * @access protected
	 * @var int
	 */
	protected $theme_prefix = 'tour_travel_package';

	/**
	 * Construcor.
	 *
	 * @since 1.0.0
	 */
	function __construct() {

		$this->setup();
		$this->init();

	}

	/**
	 * Initial setup.
	 *
	 * @since 1.0.0
	 */
	function setup() {

		$support = get_theme_support( 'footer-widgets' );
		if ( empty( $support ) ) {
			return;
		}
		if ( absint( $support[0] ) < 1 ) {
			return;
		}
		$this->max_widgets = absint( $support[0] );
		$this->active_widgets = $this->get_number_of_active_widgets();

	}

	/**
	 * Initialize hooks.
	 *
	 * @since 1.0.0
	 */
	function init() {

		if ( $this->max_widgets < 1 ) {
			return;
		}

		// Register footer widgets.
		add_action( 'widgets_init', array( $this, 'footer_widgets_init' ), 20 );

		add_action( $this->theme_prefix . '_action_before_footer', array( $this, 'add_footer_widgets' ), 3 );

		// Add custom class in widgets.
		add_filter( $this->theme_prefix . '_filter_footer_widget_class', array( $this, 'custom_footer_widget_class' ) );

	}

	/**
	 * Register footer widgets.
	 *
	 * @since 1.0.0
	 */
	function footer_widgets_init() {

		for ( $i = 1; $i <= $this->max_widgets; $i++ ) {
			register_sidebar( array(
				'name'          => sprintf( __( 'Footer Widget %d', 'tour-travel-package' ), $i ),
				'id'            => sprintf( 'footer-%d', $i ),
				'before_widget' => '<aside id="%1$s" class="widget %2$s">',
				'after_widget'  => '</aside>',
				'before_title'  => '<h3 class="widget-title">',
				'after_title'   => '</h3>',
			) );
		}

	}

	/**
	 * Returns number of active footer widgets.
	 *
	 * @since 1.0.0
	 *
	 * @return int Number of active widgets.
	 */
	private function get_number_of_active_widgets() {

		$count = 0;

		for ( $i = 1; $i <= $this->max_widgets; $i++ ) {
			if ( is_active_sidebar( 'footer-' . $i ) ) {
				$count++;
			}
		}

		return $count;

	}

	/**
	 * Add footer widgets content in front end.
	 *
	 * @since 1.0.0
	 */
	function add_footer_widgets() {

		$flag_apply_footer_widgets_content = apply_filters( $this->theme_prefix . '_filter_footer_widgets', true );
		if ( true !== $flag_apply_footer_widgets_content ) {
			return false;
		}

		// If widgets exist → show widgets
		if ( $this->active_widgets > 0 ) {

			$args = array(
				'container' => 'div',
				'before'    => '<div class="container"><div class="inner-wrapper">',
				'after'     => '</div></div>',
			);

			echo $this->get_footer_widgets_content( $args );

		} else {

			// No widgets → show default footer
			$this->default_footer_widgets();

		}
	}

	function default_footer_widgets() {?>
		<div id="footer-widgets" class="footer-default">
			<div class="container">
				<div class="inner-wrapper">
					<div class="footer-widget-area col-lg-3 col-md-6 col-12">
						<h3 class="footer-widget-title"><?php esc_html_e( 'About Us', 'tour-travel-package' ); ?></h3>
						<p>
							<?php
								$tour_travel_package_theme = wp_get_theme();
								$tour_travel_package_description = $tour_travel_package_theme->get( 'Description' );

								if ( ! empty( $tour_travel_package_description ) ) {
									echo esc_html( wp_trim_words( $tour_travel_package_description, 25, '...' ) );
								}
							?>
						</p>
					</div>
					<div class="footer-widget-area col-lg-3 col-md-6 col-12">
						<h3 class="footer-widget-title"><?php esc_html_e( 'Quick Links', 'tour-travel-package' ); ?></h3>
						<ul>
							<li><a href="#"><?php esc_html_e( 'Home', 'tour-travel-package' ); ?></a></li>
							<li><a href="#"><?php esc_html_e( 'About', 'tour-travel-package' ); ?></a></li>
							<li><a href="#"><?php esc_html_e( 'Pages', 'tour-travel-package' ); ?></a></li>
							<li><a href="#"><?php esc_html_e( 'Blog', 'tour-travel-package' ); ?></a></li>
							<li><a href="#"><?php esc_html_e( 'Contact', 'tour-travel-package' ); ?></a></li>
						</ul>
					</div>
					<div class="footer-widget-area col-lg-3 col-md-6 col-12">
						<h3 class="footer-widget-title"><?php esc_html_e( 'Latest Posts', 'tour-travel-package' ); ?></h3>
						<ul>
							<?php
							$tour_travel_package_recent_posts = wp_get_recent_posts( array(
								'numberposts' => 5,
								'post_status' => 'publish'
							) );

							foreach( $tour_travel_package_recent_posts as $tour_travel_package_post ) :
							?>
								<li>
									<a href="<?php echo esc_url( get_permalink( $tour_travel_package_post['ID'] ) ); ?>">
										<?php echo esc_html( $tour_travel_package_post['post_title'] ); ?>
									</a>
								</li>
							<?php endforeach; wp_reset_query(); ?>
						</ul>
					</div>
					<div class="footer-widget-area col-lg-3 col-md-6 col-12">
						<h3 class="footer-widget-title"><?php esc_html_e( 'Contact', 'tour-travel-package' ); ?></h3>
						<p>
							<strong><?php esc_html_e( 'Email :-', 'tour-travel-package' ); ?></strong><br>
							<a href="mailto:info@example.com"><?php esc_html_e( 'info@example.com', 'tour-travel-package' ); ?></a>
						</p>
						<p>
							<strong><?php esc_html_e( 'Phone :-', 'tour-travel-package' ); ?></strong><br>
							<a href="tel:+911234567890"><?php esc_html_e( '+91 12345 67890', 'tour-travel-package' ); ?></a>
						</p>
						<p>
							<strong><?php esc_html_e( 'Address :-', 'tour-travel-package' ); ?></strong><br>
							<?php esc_html_e( '456 Market Avenue, Suite 200, Downtown, City, State, Country', 'tour-travel-package' ); ?>
						</p>
					</div>
				</div>
			</div>
		</div>
		<?php
	}

	/**
	 * Returns all active footer widgets number in array.
	 *
	 * @since 1.0.0
	 *
	 * @return array Active widgets
	 */
	function all_active_widgets() {

		$arr = array();

		for ( $i = 1; $i <= $this->max_widgets ; $i++ ) {
			if ( is_active_sidebar( 'footer-' . $i ) ) {
				$arr[] = $i;
			}
		}
		return $arr;

	}

	/**
	 * Returns footer widget contents.
	 *
	 * @since 1.0.0
	 *
	 * @param array $args Footer widget arguments.
	 */
	function get_footer_widgets_content( $args ) {

		$number = $this->active_widgets;
		$all_active_widgets = $this->all_active_widgets();

		// Default arguments.
		$args = wp_parse_args( (array) $args, array(
			'container'       => 'div',
			'container_class' => '',
			'container_style' => '',
			'container_id'    => 'footer-widgets',
			'wrap_class'      => 'footer-widget-area',
			'before'          => '',
			'after'           => '',
		) );
		$args = apply_filters( $this->theme_prefix . '_filter_footer_widgets_args', $args );

		ob_start();
		$container_open = '';
		$container_close = '';

		if ( ! empty( $args['container_class'] ) || ! empty( $args['container_id'] ) ) {
			$container_open = sprintf(
				'<%s %s %s %s>',
				$args['container'],
				( $args['container_class'] ) ? 'class="' . $args['container_class'] . '"':'',
				( $args['container_id'] ) ? 'id="' . $args['container_id'] . '"':'',
				( $args['container_style'] ) ? 'style="' . esc_attr( $args['container_style'] ) . '"':''
			);
		}
		if ( ! empty( $args['container_class'] ) || ! empty( $args['container_id'] ) ) {
			$container_close = sprintf(
				'</%s>',
				$args['container']
			);
		}

		echo $container_open;

		echo $args['before'];

		for ( $i = 1; $i <= $number; $i++ ) {

			if ( isset( $all_active_widgets[ $i - 1 ] ) ) {
				$item_class = apply_filters( $this->theme_prefix . '_filter_footer_widget_class', '', $i );
				$div_classes = implode( ' ', array( $item_class, $args['wrap_class'] ) );
				$div_classes = trim( $div_classes );

				echo '<div class="' . esc_attr( $div_classes ) .  '">';
				$sidebar_name = 'footer-' . $all_active_widgets[ $i - 1 ];
				dynamic_sidebar( $sidebar_name );
				echo '</div><!-- .' . esc_attr( $args['wrap_class'] ) . ' -->';
			}

		} // End for loop.

		echo $args['after'];

		echo $container_close;

		$output = ob_get_contents();
		ob_end_clean();
		return $output;

	}

	/**
	 * Add custom class in widgets.
	 *
	 * @since 1.0.0
	 *
	 * @param string $input Class for footer widget column.
	 */
	function custom_footer_widget_class( $input ) {

		$footer_widgets_number = $this->active_widgets;

		$input .= 'footer-active-' . $footer_widgets_number;

		return $input;

	}
}

// Initialize.
$Tour_Travel_Package_Footer_Widgets = new Tour_Travel_Package_Footer_Widgets();