<?php

namespace ControlScripts\Scopes;

use \SHServ\Entities\Device;

class OfficeRoomScope extends \SHServ\Middleware\ControlScripts implements \SHServ\Implements\ControlScriptsInterface {
	use \ControlScripts\Common;
	
	public function register_sync_map(): void {
		$this -> register_global_device_sync_map();
	}

	public function register_events_handlers(): void {
		$this -> btn_on_online("buttons_office_room");
		$this -> set_btns_click_handlers("buttons_office_room");
	}

	public function register_actions_scripts(): void {
		$this -> add_action_script([
			"alias" => "computer_table_lamp_switch",
			"name" => "Комп. лампа",
			"icon" => '<i class="ph ph-lamp"></i><i class="ph ph-desktop"></i>',
			"description" => "Вкл/Выкл. настольную компьютерную лампу",
			"author" => "Eugene Sukhodolskiy"
		], function($params) {
			return $this -> lamp_switch("computer_table_lamp", 0);
		});

		$this -> add_action_script([
			"alias" => "craft_table_lamp_switch",
			"name" => "Крафт. лампа",
			"icon" => '<i class="ph ph-lamp"></i><i class="ph ph-wrench"></i>>',
			"description" => "Вкл/Выкл. настольную лампу на столе для крафта",
			"author" => "Eugene Sukhodolskiy"
		], function($params) {
			return $this -> lamp_switch("craft_table_lamp", 0);
		});

		$this -> add_action_script([
			"alias" => "main_lamps_switcher",
			"name" => "Осн. свет в кабинете",
			"icon" => '<i class="ph ph-lightbulb"></i>',
			"description" => "Включить/выключить основной свет в кабинете",
			"author" => "Eugene Sukhodolskiy"
		], function($params) {
			return $this -> lamp_switch("light_hub_1", 0);
		});
	}

	public function register_regular_scripts(): void {
	}

	// ACTIONS

	protected function lamp_switch(String $relay_alias, int $channel): Array {
		$btns_block_api = $this -> devices() -> by_alias("buttons_office_room") -> device_api();
		$relay_api = $this -> devices() -> by_alias($relay_alias) -> device_api();

		$result = false;
		if($relay_api instanceof \SHServ\Tools\DeviceAPI\Relay) {
			$result = $relay_api -> toggle_channel($channel);
			$this -> helper() -> sync_relay_to_btns($this -> sync_map(), $relay_alias);
		}
		
		return [
			"result" => $result
		];
	}

	// protected function btns_online(String $button_alias): void {
	// 	$this -> add_event_handler("button@{$button_alias}.online", function(Device $btns_block, Array $data) {
	// 		$btns_block_api = $btns_block -> device_api();
	// 		$this -> helper() -> sync_btn_channels($this -> sync_map(), $btns_block -> alias);
	// 	});
	// }

	// protected function btns_handlers(String $button_alias): void {
	// 	$buttons_channels = $this -> helper() -> prepare_sync_map_by_alias($this -> sync_map(), $button_alias);
	// 	foreach($buttons_channels as $btn_channel => $entry) { 
	// 		if($entry[0]["type"] != "relay") {
	// 			continue;
	// 		}

	// 		$relay_alias = $entry[0]["alias"];
	// 		$relay_channel = $entry[0]["channel"];

	// 		$this -> add_event_handler("button@{$button_alias}({$btn_channel}).press", function(Device $btns_block, Array $data) use ($btn_channel, $relay_alias, $relay_channel) {
	// 			$btns_block_api = $btns_block -> device_api();
	// 			$relay_api = $this -> devices() -> by_alias($relay_alias) -> device_api();

	// 			if($relay_api instanceof \SHServ\Tools\DeviceAPI\Relay and $btns_block_api instanceof \SHServ\Tools\DeviceAPI\Button) {
	// 				$relay_api -> toggle_channel($relay_channel);
	// 				$this -> helper() -> sync_relay_to_btn_channel($relay_api, $btns_block_api, $relay_channel, $btn_channel);
	// 			}
	// 		});
	// 	}
	// }
}
