<?php

use Core\Model;

class Agences extends Model
{

	public function __construct()
	{
		parent::__construct();
		$this->table = 'ca_agences';
	}
	public function getAllowedAgencies(){
		$profiles_access = isset($GLOBALS["BO_CONF"]["ACCESS_PROFILES"]["RAPPORT_DCC"]) && $GLOBALS["BO_CONF"]["ACCESS_PROFILES"]["RAPPORT_DCC"] ? $GLOBALS["BO_CONF"]["ACCESS_PROFILES"]["RAPPORT_DCC"] : array('1','10','2','90', '100', '70');
		if(isset($_SESSION['profil']) && in_array($_SESSION["profil"], $profiles_access) || (isset($_SESSION["profiles"]) && in_array("DA",$_SESSION["profiles"]))){
			// Admins has access to all agencies
			if((isset($_SESSION['profil']) && ($_SESSION['profil']==100 || $_SESSION['profil']==90) && $_SESSION["user"] != "conseiller") || ($_SESSION["user"] == "conseiller" && !$GLOBALS["STATS_CONF"]["CLOISONNEMENT"])){ 
				return false;
			}
			$agences = array();
			$args = array($_SESSION["id"]);
			$agencesList = array();
			if($_SESSION['user'] !== 'admin'){
				$only_agency_from_pile = isset($GLOBALS["BO_CONF"]["ONLY_AGENCY_FROM_PILE"]) && $GLOBALS["BO_CONF"]["ONLY_AGENCY_FROM_PILE"] ? " AND id_agence=".$_SESSION["agence"] : "";
				if(isset($GLOBALS["BO_CONF"]["HIERARCHICAL"]) && $GLOBALS["BO_CONF"]["HIERARCHICAL"]["ENABLED"] && in_array('agence_principale',$GLOBALS["BO_CONF"]["HIERARCHICAL"]["HIERARCHY"])){ // different d'un admin
				$parent = $GLOBALS["BO_CONF"]["HIERARCHICAL"]["HIERARCHY"][count($GLOBALS["BO_CONF"]["HIERARCHICAL"]["HIERARCHY"])-2];
				$query = "SELECT id_agence FROM ca_agences a WHERE id_".$parent." IN (SELECT id_parent FROM ca_directeur_aps WHERE id_conseiller = ?)".$only_agency_from_pile;
				}
				else{
					$query = "SELECT id_agence,TIMESTAMPDIFF(SECOND,last_active,now()) last_active_sec, temporaire FROM ca_conseiller_agence WHERE id_conseiller =". intval($_SESSION["id"])." AND id_profile=6".$only_agency_from_pile;
				}
				$result = excuteQuery($query);
				if($result['status']){
				  if($result['stmt']->rowCount()){
					while ($row = $result['stmt']->fetch(PDO::FETCH_OBJ)) {
						if($row->temporaire == 1){
							if(intval($row->last_active_sec) < 15){
								$agencesList[] = $row->id_agence;
							}
						}else{
							$agencesList[] = $row->id_agence;
						}
					}
					$agencesList = $this->flatten($agencesList);
				  }
				}
			}else if ($_SESSION["profil"] != 100 && $_SESSION['user'] == 'admin') {
				$query = "SELECT l.id_agence FROM ca_links l WHERE l.id_admin =". intval($_SESSION["id"]);
				$result = excuteQuery($query);
				if($result['status']){
				  if($result['stmt']->rowCount()){
					while ($row = $result['stmt']->fetch(PDO::FETCH_OBJ)) {
						$agencesList[] = $row->id_agence;
					}
					$agencesList = $this->flatten($agencesList);
				  }
				}
			}else{
				$query = "SELECT id_agence FROM ca_agences WHERE supp =0";
				$result = excuteQuery($query);
				if($result['status']){
				  if($result['stmt']->rowCount()){
					while ($row = $result['stmt']->fetch(PDO::FETCH_OBJ)) {
						$agencesList[] = $row->id_agence;
					}
					$agencesList = $this->flatten($agencesList);
				  }
				}
			}
			if($_SESSION["agence"]) $agencesList[] = $_SESSION["agence"];
			$agences = $_SESSION["agences"] ? array_merge($agencesList,$_SESSION["agences"]) : $agencesList;
			$agences = array_unique($agences);
			return $agences?implode(',' , $agences):'0';
		}
		return '-1';
	}

	public function flatten(array $array) {
		$return = array();
		array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
		return $return;
	}

	public function listAgences() {
		$allowedAgencies = $this->getAllowedAgencies();
		$agenciesFilter =  $allowedAgencies ? " AND id_agence IN (".$allowedAgencies.")" : "";
		$sql = "SELECT id_agence, eds, code_agence, nom_agence FROM ".$this->table." WHERE inactif=0 AND supp=0 ".$agenciesFilter." AND is_active=1 ORDER BY nom_agence ASC";

		$results =  $this->selectall($sql);

		return $results;
	}

}