<?php

namespace JFB_Modules\Blocks_V2;

use Jet_Form_Builder\Admin\Tabs_Handlers\Tab_Handler_Manager;
use JFB_Components\Module\Base_Module_After_Install_It;
use JFB_Components\Module\Base_Module_Dir_It;
use JFB_Components\Module\Base_Module_Dir_Trait;
use JFB_Components\Module\Base_Module_Handle_It;
use JFB_Components\Module\Base_Module_Handle_Trait;
use JFB_Components\Module\Base_Module_It;
use JFB_Components\Module\Base_Module_Url_It;
use JFB_Components\Module\Base_Module_Url_Trait;

final class Module implements
	Base_Module_It,
	Base_Module_Handle_It,
	Base_Module_Url_It,
	Base_Module_Dir_It,
	Base_Module_After_Install_It {

	use Base_Module_Url_Trait;
	use Base_Module_Handle_Trait;
	use Base_Module_Dir_Trait;

	/**
	 * @var Actions_Integration\Actions_Integration
	 */
	private $action_integration;

	public function rep_item_id() {
		return 'blocks-v2';
	}

	public function condition(): bool {
		return true;
	}

	public function on_install() {
		$this->action_integration = new Actions_Integration\Actions_Integration();

		// Register Phone Field settings tab
		Tab_Handler_Manager::instance()->install( new Phone_Field\Admin_Tabs\Phone_Field_Handler() );
	}

	public function on_uninstall() {
		unset( $this->action_integration );

		// Unregister Phone Field settings tab
		Tab_Handler_Manager::instance()->uninstall( 'phone-field-tab' );
	}

	public function init_hooks() {
		add_filter( 'jet-form-builder/blocks/items', array( $this, 'add_blocks_types' ) );

		$this->action_integration->init_hooks();
	}

	public function remove_hooks() {
		remove_filter( 'jet-form-builder/blocks/items', array( $this, 'add_blocks_types' ) );
	}

	public function add_blocks_types( array $block_types ): array {
		array_push(
			$block_types,
			new Text_Field\Block_Type(),
			new Repeater_Field\Block_Type_Row(),
			new Repeater_Field\Block_Type(),
			new Phone_Field\Block_Type()
		);

		return $block_types;
	}

	public function get_action_integration() {
		return $this->action_integration;
	}

	public function set_action_integration( $action_integration ) {
		$this->action_integration = $action_integration;
	}
}
