<?php

namespace SHServ\Controllers;

use \SHServ\Models\Devices;
use \SHServ\Models\EventsModel;

class EventsController extends \SHServ\Middleware\Controller {

	/**
	 * Тригерит ивенты от устройств
	 * @param  String $event_name Like a "click"
	 * @param  String $device_id  device_hard_id
	 * @param  String $data  Arguments from device to event handlers
	 */

	public function new_event($event_name, $device_id, $data) {
		$devices_model = new Devices();
		$device = $devices_model -> by_hard_id($device_id);

		if(!$device) {
			return $this -> utils() -> response_error("unknown_device", ["device_id"]);
		}

		if(!$device -> auth() -> is_active()) {
			return $this -> utils() -> response_error("error_of_device_auth");
		}

		ignore_user_abort(true);
		set_time_limit(10);

		$response = json_encode(['status' => 'ok']);

		http_response_code(200);
		header("Content-Type: application/json; charset=utf-8");
		header("Content-Length: " . strlen($response));
		header("Connection: close");

		echo $response;

		if (function_exists('fastcgi_finish_request')) {
			fastcgi_finish_request();
		} else {
			ob_flush();
			flush();
		}

		$events_model = new EventsModel();

		if(isset($data["channel"])) {
			$events_model -> channel_alias_device_event_call($device, $event_name, intval($data["channel"]), $data);
			$events_model -> channel_device_event_call($device, $event_name, intval($data["channel"]), $data);
		}

		$events_model -> alias_device_event_call($device, $event_name, $data);
		$events_model -> global_device_event_call($device, $event_name, $data);
		$events_model -> global_any_device_event_call($device, $event_name, $data);
	}
}
