<?php

namespace SHServ\Controllers;

use \SHServ\Models\Devices;
use \SHServ\Tools\DeviceScanner;

class CronController extends \SHServ\Middleware\Controller {
	public function run_regular_cron_scripts() {
		// В будущем: фильтруем список, отсеивая те скрипты, что выключены
		
		$scopes = app() -> control_scripts_instances;
		foreach($scopes as $scope_name => $scope) {
			$scripts = $scope -> get_regular_scripts();

			foreach($scripts as $script_alias => $script) {
				$script();
			}
		}
	}

	public function status_update_scanning() {
		$device_scanner = new DeviceScanner();
		$found_devices = $device_scanner -> scan_range(FCONF["device_ip_range"][0], FCONF["device_ip_range"][1]);

		$devices_model = new Devices(); 
		$active_devices = $devices_model -> get_device_list();

		foreach($active_devices as $active_device) {
			$is_active = false;
			$is_changed = false;

			foreach($found_devices as $found_device) {
				if($active_device -> device_hard_id != $found_device["device_id"]) {
					continue;
				}

				$is_active = true;

				if($active_device -> connection_state == "lost") {
					$active_device -> connection_state = "active";
					$is_changed = true;
				}

				if($active_device -> device_ip != $found_device["ip_address"]) {
					$active_device -> device_ip = $found_device["ip_address"];
					$is_changed = true;
				}

				break;
			}

			if(!$is_active) {
				if($active_device -> connection_state == "active") {
					$active_device -> connection_state = "lost";
					$is_changed = true;
				}
			}
			
			$is_changed and $active_device -> update();
		}
	}
}