<?php
/**
 * @package Unlimited Elements
 * @author unlimited-elements.com
 * @copyright (C) 2021 Unlimited Elements, All Rights Reserved.
 * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * */
if ( ! defined( 'ABSPATH' ) ) exit;


class UniteCreatorLayoutsView{

	protected $isTemplate = false;
	protected $layoutType, $layoutTypeTitle, $layoutTypeTitlePlural;
	protected $objLayoutType;

	protected $showButtonsPanel = true, $showHeaderTitle = true;
	protected $showColCategory = true, $showColShortcode = true;
	protected $isDisplayTable = true;
	protected $objTable, $urlViewCreateObject, $urlManageAddons;
	protected $arrLayouts, $pageBuilder, $objLayouts, $objManager;


	/**
	 * constructor
	 */
	public function __construct(){

		$this->objTable = new UniteTableUC();
		$this->pageBuilder = new UniteCreatorPageBuilder();
		$this->objLayouts = new UniteCreatorLayouts();

	}

	private function z_INIT(){}


	/**
	 * set templates text
	 */
	protected function getTemplatesTextArray(){

		$pluralLower = strtolower($this->layoutTypeTitlePlural);
		$titleLower = strtolower($this->layoutTypeTitle);


		$arrText = array(
			"import_layout"=>esc_html__("Import ","unlimited-elements-for-elementor").$this->layoutTypeTitle,
			"import_layouts"=>esc_html__("Import ","unlimited-elements-for-elementor").$this->layoutTypeTitlePlural,
			"uploading_layouts_file"=>esc_html__("Uploading ","unlimited-elements-for-elementor"). $this->layoutTypeTitlePlural. esc_html__("  file...","unlimited-elements-for-elementor"),
			"layouts_added_successfully"=> $this->layoutTypeTitle.esc_html__(" Added Successfully","unlimited-elements-for-elementor"),
			"my_layouts"=>esc_html__("My ","unlimited-elements-for-elementor").$this->layoutTypeTitlePlural,
			"search_layout"=> esc_html__("Search","unlimited-elements-for-elementor")." ". $this->layoutTypeTitlePlural,
			"layout_title"=>$this->layoutTypeTitle." ". esc_html__("Title","unlimited-elements-for-elementor"),
			"no_layouts_found"=>esc_html__("No","unlimited-elements-for-elementor")." ".$this->layoutTypeTitlePlural. " ". esc_html__("Found","unlimited-elements-for-elementor"),
			"are_you_sure_to_delete_this_layout"=>esc_html__("Are you sure to delete this ?","unlimited-elements-for-elementor").$titleLower,
			"edit_layout"=>esc_html__("Edit","unlimited-elements-for-elementor")." ".$this->layoutTypeTitle,
			"manage_layout_categories"=>esc_html__("Manage ","unlimited-elements-for-elementor"). $this->layoutTypeTitlePlural. esc_html__(" Categories","unlimited-elements-for-elementor"),
			"select_layouts_export_file"=>esc_html__("Select ","unlimited-elements-for-elementor"). $pluralLower.  esc_html__(" export file","unlimited-elements-for-elementor"),
			"new_layout"=>esc_html__("New","unlimited-elements-for-elementor")." ". $this->layoutTypeTitle,
		);

		return($arrText);
	}


	/**
	 * set templat etype
	 */
	public function setLayoutType($layoutType){

		$this->layoutType = $layoutType;

		$this->objLayoutType = UniteCreatorAddonType::getAddonTypeObject($layoutType, true);

		//set title
		$this->layoutTypeTitle = $this->objLayoutType->textSingle;
		$this->layoutTypeTitlePlural = $this->objLayoutType->textPlural;

		//set text
		$arrText = $this->getTemplatesTextArray();

		HelperUC::setLocalText($arrText);

		//set other settings
		$this->isTemplate = $this->objLayoutType->isTemplate;
		$this->showColCategory = $this->objLayoutType->enableCategories;
		$this->showColShortcode = $this->objLayoutType->enableShortcodes;

		//set display type manager / table
		$displayType = UniteFunctionsUC::getGetVar("displaytype", "",UniteFunctionsUC::SANITIZE_TEXT_FIELD);
		if(empty($displayType))
			$displayType = $this->objLayoutType->displayType;


		if($displayType == UniteCreatorAddonType_Layout::DISPLAYTYPE_MANAGER)
			$this->isDisplayTable = false;

	}


	/**
	 * validate inited
	 */
	protected function validateInited(){

		if(empty($this->objLayoutType))
			UniteFunctionsUC::throwError("The layout type not inited, please use : setLayoutType function");

		if($this->objLayoutType->isLayout == false)
			UniteFunctionsUC::throwError("The layout type should be layout type, now: ".$this->objLayoutType->textShowType);


	}

	/**
	 * init display vars table related
	 */
	protected function initDisplayVars_table(){

		$this->objTable->setDefaultOrderby("title");

		$pagingOptions = $this->objTable->getPagingOptions();

		if(!empty($this->layoutType)){
			$pagingOptions["layout_type"] = $this->layoutType;
		}

		$response = $this->objLayouts->getArrLayoutsPaging($pagingOptions);

		$this->arrLayouts = $response["layouts"];
		$pagingData = $response["paging"];

		$urlLayouts = HelperUC::getViewUrl_LayoutsList();

		$this->objTable->setPagingData($urlLayouts, $pagingData);

	}


	/**
	 *
	 * init manager display vars
	 */
	protected function initDisplayVars_manager(){

		$this->objManager = new UniteCreatorManagerLayouts();
		$this->objManager->init($this->layoutType);

	}


	/**
	 * init display vars
	 */
	protected function initDisplayVars(){

		//init layout type
		$this->urlViewCreateObject = HelperUC::getViewUrl_Layout();
		$this->urlManageAddons = HelperUC::getViewUrl_Addons();


		if($this->showHeaderTitle == true){
			$headerTitle = HelperUC::getText("my_layouts");
			require HelperUC::getPathTemplate("header");
		}else
			require HelperUC::getPathTemplate("header_missing");

		//table object
		if($this->isDisplayTable == true)
			$this->initDisplayVars_table();
		else
			$this->initDisplayVars_manager();
	}


	private function z_PUT_HTML(){}


	/**
	 * put page catalog browser
	 */
	public function putDialogPageCatalog(){

		$webAPI = new UniteCreatorWebAPI();
		$isPageCatalogExists = $webAPI->isPagesCatalogExists();
		if($isPageCatalogExists == false)
			return(false);

		$objBrowser = new UniteCreatorBrowser();
		$objBrowser->initAddonType(GlobalsUC::ADDON_TYPE_REGULAR_LAYOUT);
		$objBrowser->putBrowser();

	}


	/**
	 * put manage categories dialog
	 */
	public function putDialogCategories(){

		$prefix = "uc_dialog_add_category";

		?>
			<div id="uc_dialog_add_category"  title="<?php HelperUC::putText("manage_layout_categories")?>" style="display:none; height: 300px;" class="unite-inputs">

				<div class="unite-dialog-top">

					<input type="text" class="uc-catdialog-button-clearfilter" style="margin-bottom: 1px;">
					<a class='uc-catdialog-button-filter unite-button-secondary' href="javascript:void(0)"><?php esc_html_e("Filter", "unlimited-elements-for-elementor")?></a>
					<a class='uc-catdialog-button-filter-clear unite-button-secondary' href="javascript:void(0)"><?php esc_html_e("Clear Filter", "unlimited-elements-for-elementor")?></a>

					<span class="uc-catlist-sort-wrapper">

						<?php esc_html_e("Sort: ","unlimited-elements-for-elementor")?>
						<a href="javascript:void(0)" class="uc-link-change-cat-sort" data-type="a-z">a-z</a>
						,
						<a href="javascript:void(0)" class="uc-link-change-cat-sort" data-type="z-a">z-a</a>
					</span>

				</div>

				<div id="list_layouts_cats" class="uc-categories-list"></div>

				<hr/>

					<?php esc_html_e("Add New Category", "unlimited-elements-for-elementor")?>:
					<input id="uc_dialog_add_category_catname" type="text" class="unite-input-regular" value="">

					<a id="uc_dialog_add_category_button_add" href="javascript:void(0)" class="unite-button-secondary" data-action="add_category"><?php esc_html_e("Create Category", "unlimited-elements-for-elementor")?></a>

				<div>

					<?php
					$buttonTitle = esc_html__("Set Category to Page", "unlimited-elements-for-elementor");
					$loaderTitle = esc_html__("Updating Category...", "unlimited-elements-for-elementor");
					$successTitle = esc_html__("Category Updated", "unlimited-elements-for-elementor");
					HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
				?>


			</div>

			<div id="uc_layout_categories_message" title="<?php esc_html_e("Categories Message", "unlimited-elements-for-elementor")?>">
			</div>

		</div>

		<?php
	}


	/**
	 * put import addons dialog
	 */
	public function putDialogImportLayout(){

		$dialogTitle = HelperUC::getText("import_layout");

		?>

			<div id="uc_dialog_import_layouts" class="unite-inputs" title="<?php echo esc_attr($dialogTitle)?>" style="display:none;">

				<div class="unite-dialog-top"></div>

				<div class="unite-inputs-label">
					<?php HelperUC::putText("select_layouts_export_file")?>:
				</div>

				<form id="dialog_import_layouts_form" name="form_import_layouts">
					<input id="dialog_import_layouts_file" type="file" name="import_layout">

				</form>

				<div class="unite-inputs-sap-double"></div>

				<div class="unite-inputs-label" >
					<label for="dialog_import_layouts_file_overwrite">
						<?php esc_html_e("Overwrite Addons", "unlimited-elements-for-elementor")?>:
					</label>
					<input type="checkbox" id="dialog_import_layouts_file_overwrite">
				</div>


				<div class="unite-clear"></div>

				<?php
					$prefix = "uc_dialog_import_layouts";

					$buttonTitle = HelperUC::getText("import_layouts");
					$loaderTitle = HelperUC::getText("uploading_layouts_file");
					$successTitle = HelperUC::getText("layouts_added_successfully");

					HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
				?>

			</div>

	<?php
	}




	/**
	 * put buttons panel html
	 */
	protected function putHtmlButtonsPanel(){

		?>
		<div class="uc-buttons-panel unite-clearfix">
			<a href="<?php echo esc_url($this->urlViewCreateObject)?>" class="unite-button-primary unite-float-left"><?php HelperUC::putText("new_layout");?></a>

			<a id="uc_button_import_layout" href="javascript:void(0)" class="unite-button-secondary unite-float-left mleft_20"><?php HelperUC::putText("import_layouts");?></a>

			<a href="javascript:void(0)" id="uc_layouts_global_settings" class="unite-float-right mright_20 unite-button-secondary"><?php HelperUC::putText("layouts_global_settings");?></a>
			<a href="<?php echo esc_url($this->urlManageAddons)?>" class="unite-float-right mright_20 unite-button-secondary"><?php esc_html_e("My Addons", "unlimited-elements-for-elementor")?></a>

		</div>
		<?php
	}

	/**
	 * display notice
	 */
	protected function putHtmlTemplatesNotice(){

		if($this->isTemplate == false)
			return(false);

		?>
			<div class="uc-layouts-notice"> Notice - The templates will work for only if the blox template selected</div>
		<?php
	}


	/**
	 * put layout type tabs
	 */
	public function putLayoutTypeTabs(){


		dmp("get all template types");
		exit();

		?>
		<div class="uc-layout-type-tabs-wrapper">

			<?php foreach($arrLayoutTypes as $type => $arrType):

				$tabTitle = UniteFunctionsUC::getVal($arrType, "plural");

				$urlView = HelperUC::getViewUrl_TemplatesList(null, $type);

				$addClass = "";
				if($type == $this->layoutType){
					$addClass = " uc-tab-selected";
					$urlView = "#";
				}

			?>
			<a href="<?php echo esc_url($urlView)?>" class="uc-tab-layouttype<?php echo esc_attr($addClass)?>"><?php echo esc_html($tabTitle)?></a>

			<?php endforeach?>

		</div>
		<?php

	}

	/**
	 * display manager
	 */
	public function displayManager(){

		$this->objManager->outputHtml();

	}


	/**
	 * display table view
	 */
	public function display(){

		$this->validateInited();
		$this->initDisplayVars();

		if($this->isDisplayTable)
			$this->displayTable();
		else
			$this->displayManager();

	}


	/**
	 * display layouts view
	 */
	public function displayTable(){

		$sizeActions = UniteProviderFunctionsUC::applyFilters(UniteCreatorFilters::FILTER_LAYOUTS_ACTIONS_COL_WIDTH, 380);

		$numLayouts = count($this->arrLayouts);


?>
	<?php if($this->showButtonsPanel == true)
			$this->putHtmlButtonsPanel();
	?>

	<div class="unite-content-wrapper">

		<?php

		$this->objTable->putActionsFormStart();

		if($this->isTemplate == true)
			$this->putLayoutTypeTabs();

		?>
		<div class="unite-table-filters">


		<?php
		$this->objTable->putSearchForm(HelperUC::getText("search_layout"), "Clear");

			if($this->isTemplate == false):

				$this->objTable->putFilterCategory();

			endif;

		?>

		</div>

		<?php if(empty($this->arrLayouts)): ?>
		<div class="uc-no-layouts-wrapper">
			<?php HelperUC::putText("no_layouts_found");?>
		</div>
		<?php else:?>

			<!-- sort chars: &#8743 , &#8744; -->

			<table id="uc_table_layouts" class='unite_table_items' data-text-delete="<?php HelperUC::putText("are_you_sure_to_delete_this_layout")?>">
				<thead>
					<tr>
						<th width=''>
							<?php $this->objTable->putTableOrderHeader("title", HelperUC::getText("layout_title")) ?>
						</th>

						<?php if($this->showColShortcode == true):?>
						<th width='200'><?php esc_html_e("Shortcode","unlimited-elements-for-elementor"); ?></th>
						<?php endif?>

						<?php if($this->showColCategory == true):?>
						<th width='200'><?php $this->objTable->putTableOrderHeader("catid", esc_html__("Category","unlimited-elements-for-elementor")) ?>
						<?php endif?>

						<th width='<?php echo esc_attr($sizeActions)?>'><?php esc_html_e("Actions","unlimited-elements-for-elementor"); ?></th>
						<th width='60'><?php esc_html_e("Preview","unlimited-elements-for-elementor"); ?></th>
					</tr>
				</thead>
				<tbody>

					<?php foreach($this->arrLayouts as $key=>$layout):

						$id = $layout->getID();

						$title = $layout->getTitle();

						$shortcode = $layout->getShortcode();
						$shortcode = UniteFunctionsUC::sanitizeAttr($shortcode);

						$editLink = HelperUC::getViewUrl_Layout($id);

						$previewLink = HelperUC::getViewUrl_LayoutPreview($id, true);

						$showTitle = HelperHtmlUC::getHtmlLink($editLink, $title);

						$rowClass = ($key%2==0)?"unite-row1":"unite-row2";

						$arrCategory = $layout->getCategory();

						$catID = UniteFunctionsUC::getVal($arrCategory, "id");
						$catTitle = UniteFunctionsUC::getVal($arrCategory, "name");

					?>
						<tr class="<?php echo esc_attr($rowClass)?>">
							<td><?php echo esc_html($showTitle)?></td>

							<?php if($this->showColShortcode):?>

							<td>
								<input type="text" readonly onfocus="this.select()" class="unite-input-medium unite-cursor-text" value="<?php echo esc_attr($shortcode)?>" />
							</td>

							<?php endif?>

							<?php if($this->showColCategory):?>

							<td><a href="javascript:void(0)" class="uc-layouts-list-category" data-layoutid="<?php echo esc_attr($id)?>" data-catid="<?php echo esc_attr($catID)?>" data-action="manage_category"><?php echo esc_html($catTitle)?></a></td>

							<?php endif?>

							<td>
								<a href='<?php echo esc_attr($editLink)?>' class="unite-button-primary float_left mleft_15"><?php HelperUC::putText("edit_layout"); ?></a>

								<a href='javascript:void(0)' data-layoutid="<?php echo esc_attr($id)?>" data-id="<?php echo esc_attr($id)?>" class="button_delete unite-button-secondary float_left mleft_15"><?php esc_html_e("Delete","unlimited-elements-for-elementor"); ?></a>
								<span class="loader_text uc-loader-delete" style="display:none"><?php esc_html_e("Deleting", "unlimited-elements-for-elementor")?></span>
								<a href='javascript:void(0)' data-layoutid="<?php echo esc_attr($id)?>" data-id="<?php echo esc_attr($id)?>" class="button_duplicate unite-button-secondary float_left mleft_15"><?php esc_html_e("Duplicate","unlimited-elements-for-elementor"); ?></a>
								<span class="loader_text uc-loader-duplicate" style="display:none"><?php esc_html_e("Duplicating", "unlimited-elements-for-elementor")?></span>
								<a href='javascript:void(0)' data-layoutid="<?php echo esc_attr($id)?>" data-id="<?php echo esc_attr($id)?>" class="button_export unite-button-secondary float_left mleft_15"><?php esc_html_e("Export","unlimited-elements-for-elementor"); ?></a>
								<?php UniteProviderFunctionsUC::doAction(UniteCreatorFilters::ACTION_LAYOUTS_LIST_ACTIONS, $id); ?>
							</td>
							<td>
								<a href='<?php echo esc_attr($previewLink)?>' target="_blank" class="unite-button-secondary float_left"><?php esc_html_e("Preview","unlimited-elements-for-elementor"); ?></a>
							</td>
						</tr>
					<?php endforeach;?>

				</tbody>
			</table>

			<?php

				$this->objTable->putPaginationHtml();
				$this->objTable->putInpageSelect();

			?>

		<?php endif?>

		<?php

			$this->objTable->putActionsFormEnd();

			$this->pageBuilder->putLayoutsGlobalSettingsDialog();
			$this->putDialogImportLayout();

			$this->putDialogCategories();

			//put pages catalog if exists
			$this->putDialogPageCatalog();
		?>


	</div>
	<?php

		$script = 'jQuery(document).ready(function(){
			var objAdmin = new UniteCreatorAdmin_LayoutsList();
			objAdmin.initObjectsListView();
		});';
		UniteProviderFunctionsUC::printCustomScript($script, true); 

	}

}
