<?php
/**
 * Import headers.
 *
 * @package Woodmart
 */

namespace XTS\Admin\Modules\Import;

use Exception;
use XTS\Modules\Header_Builder;

if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
	exit( 'No direct script access allowed' );
}

/**
 * Import headers.
 */
class Headers {
	/**
	 * Version name.
	 *
	 * @var string
	 */
	private $version;
	/**
	 * Helpers.
	 *
	 * @var Helpers
	 */
	private $helpers;

	/**
	 * Constructor.
	 *
	 * @param string $version Version name.
	 */
	public function __construct( $version ) {
		$this->helpers = Helpers::get_instance();
		$this->version = $version;

		$this->import_headers();
	}

	/**
	 * Import rev sliders.
	 */
	private function import_headers() {
		try {
			for ( $i = 1; $i <= 5; $i ++ ) {
				$header = $this->helpers->get_file_path( 'header-' . $i . '.json', $this->version );

				if ( 'elementor' === woodmart_get_current_page_builder() && file_exists( $this->helpers->get_version_folder_path( $this->version ) . 'header-' . $i . '-elementor.json' ) ) {
					$header = $this->helpers->get_file_path( 'header-' . $i . '-elementor.json', $this->version );
				}

				if ( $header ) {
					$this->create_new_header( $header, 1 === $i );
				}
			}
		} catch ( Exception $e ) {
			echo esc_html( '[ERROR] Header import<br>' );
		}
	}

	/**
	 * Create new header.
	 *
	 * @param string $file    File.
	 * @param bool   $default Default header.
	 */
	private function create_new_header( $file, $default = false ) {
		$builder       = Header_Builder::get_instance();
		$imported_data = get_option( 'wd_imported_data_' . $this->version );

		$header_data = $this->helpers->links_replace( $this->helpers->get_local_file_content( $file ), '/' );
		$header_data = $this->update_html_block_id( $header_data );

		$header_data = json_decode( $header_data, true );

		$builder->list->add_header( $header_data['id'], $header_data['name'] );
		$builder->factory->create_new( $header_data['id'], $header_data['name'], $header_data['structure'], $header_data['settings'] );

		$imported_data['headers'][ $header_data['id'] ] = $header_data['id'];

		update_option( 'wd_imported_data_' . $this->version, $imported_data, false );

		if ( $default ) {
			update_option( 'whb_main_header', $header_data['id'] );
		}
	}

	/**
	 * Update html block id in header.
	 *
	 * @param string $header_data Header data.
	 *
	 * @return string
	 */
	private function update_html_block_id( $header_data ) {
		$header_data_decoded = json_decode( $header_data, true );
		$imported_data       = $this->helpers->get_imported_data( $this->version );

		foreach ( $header_data_decoded['structure']['content'] as $row ) {
			foreach ( $row['content'] as $column ) {
				foreach ( $column['content'] as $element ) {
					if ( 'HTMLBlock' === $element['type'] ) {
						$current_id = $element['params']['block_id']['value'];
						$new_id     = '';

						if ( isset( $imported_data['all_posts'][ $current_id ]['new'] ) ) {
							$new_id = $imported_data['all_posts'][ $current_id ]['new'];
						}

						if ( $new_id ) {
							$header_data = str_replace( '"value": "' . $current_id . '"', '"value": "' . $new_id . '"', $header_data );
						}
					}

					if ( ( 'logo' === $element['type'] || 'infobox' === $element['type'] ) && ! empty( $element['params']['image']['value'] ) ) {
						$current_id = $element['params']['image']['value']['id'];
						$new_id     = '';

						if ( isset( $imported_data['all_posts'][ $current_id ]['new'] ) ) {
							$new_id = $imported_data['all_posts'][ $current_id ]['new'];
						}

						if ( $new_id ) {
							$header_data = str_replace( '"id": ' . $current_id, '"id": ' . $new_id, $header_data );
						}
					}
				}
			}
		}

		return $header_data;
	}
}
