<?php
/**
 * Define a Bloc de tableau de bord
 * @author Jean CARRUESCO
 * @category Plugin
 * @license copyright
 */
class DashboardWidget extends Entity{

	public $id;
	public $model; //Modèle (Texte)
	public $type; //Type (Liste classique)
	public $meta; //Meta (Texte Long)
	public $column = 0 ; //Colonne (Nombre Entier)
	public $row = 0 ; //Ligne (Nombre Entier)
	public $width = 1; //Largeur (Nombre Entier)
	public $height = 1; //Hauteur (Nombre Entier)
	public $dashboard; //Tableau de bord (Nombre Entier)


	public $refresh;

	public $icon;
	public $iconColor;
	public $titleColor;
	public $headerBackground;
	public $bodyBackground;
	public $bodyColor;

	public $description;
	public $label;
	public $content;
	public $uid;


	public const MODEL_NEW = 'new';

	protected $TABLE_NAME = 'dashboard_widget';
	public $entityLabel = 'Bloc de tableau de bord';
	public $fields = array(
		'id' => array('type'=>'key', 'label' => 'Identifiant'),
		'model' => array('type'=>'text','label' => 'Modèle'),
		'type' => array('type'=>'list','label' => 'Type'),
		'meta' => array('type'=>'textarea','label' => 'Meta'),
		'column' => array('type'=>'integer','label' => 'Colonne'),
		'row' => array('type'=>'integer','label' => 'Ligne'),
		'width' => array('type'=>'integer','label' => 'Largeur'),
		'height' => array('type'=>'integer','label' => 'Hauteur'),

		'icon' => array('type'=>'icon','label' => 'Icône'),
		'iconColor' => array('type'=>'color','label' => 'Couleur icône'),
		'titleColor' => array('type'=>'color','label' => 'Couleur titre'),
		'headerBackground' => array('type'=>'color','label' => 'Couleur de fond en-têtes'),
		'bodyBackground' => array('type'=>'color','label' => 'Couleur de fond du corps'),
		'bodyColor' => array('type'=>'color','label' => 'Couleur texte du corps'),

		'dashboard' => array('type'=>'integer','label' => 'Tableau de bord','link'=>'plugin/dashboard/Dashboard.class.php')
	);

	//Colonnes indexées
	public $indexes = array();

	public function __construct(){
		$this->model = self::MODEL_NEW;
		parent::__construct();
	}

	public function save(){
		if(is_array($this->meta)) $this->meta = json_encode($this->meta);
		parent::save();
	}
	public static function loadAll($columns = array(), $order = null, $limit = null, $selColumn = array('*'), $joins = 0,$alterator = null){
		return parent::loadAll($columns, $order, $limit, $selColumn, $joins,function(&$item){
			$item->meta = json_decode($item->meta,true);
		});
	}

	public function toArray($decoded=false){
		return array_merge(array(
			'icon' => $this->icon,
			'headerBackground' => $this->headerBackground,
			'description' => $this->description,
			'label' => $this->label,
			'content' => $this->content
		),parent::toArray($decoded));
	}

	function toData(){
		$row = $this->toArray();
		$model = DashboardWidget::model($this->model);

		$finalRow = $model->toArray();

		if(isset($model->css)){
			if(!isset($finalRow['cssUrl'])) $finalRow['cssUrl'] = array();
			foreach($model->css as $css){
				$finalRow['cssUrl'][] = ROOT_URL.'/'.str_replace(array('\\','/'),SLASH,str_replace(__ROOT__,'',$css));
			}
		}

		if(isset($model->js)){
			if(!isset($finalRow['jsUrl'])) $finalRow['jsUrl'] = array();
			foreach($model->js as $js){
				$finalRow['jsUrl'][] = ROOT_URL.'/'.str_replace(array('\\','/'),SLASH,str_replace(__ROOT__,'',$js));
			}
		}

		foreach($row as $attribute=>$value){
			if(isset($value)) $finalRow[$attribute] = $value;
		}
		return $finalRow;
	}

	//liste des Type possibles
	public static function types($key=null){
		$items = array(
			'widget' => array('label'=>'Widget'),
			'model' => array('label'=>'Modèle de widget'),
		);
		if(!isset($key)) return $items;
		return isset($items[$key]) ? $items[$key] : array('label'=>'Non définis');
	}

	

	public static function model($slug = null){
		$model = array();
		Plugin::callHook('widget',array(&$models));

		$newModel = new DashboardWidget();
		$newModel->icon = 'far fa-user';
		$newModel->headerBackground = 'rgb(0, 123, 255)';
		$newModel->description = 'Type de widget non défini';
		$newModel->label = 'Nouveau widget';
		$newModel->content = '<small class="text-center m-auto text-muted">Veuillez configurer votre widget</small>';
		$newModel->width = 3;
		$newModel->height = 2;
		$newModel->model = self::MODEL_NEW;
		$models[self::MODEL_NEW] = $newModel;

		foreach($models as $model){
			if(!isset($model->model)) continue;
			if(empty($model->label)) $model->label = 'Sans titre';
			$models[$model->model] = $model;
		}
		if(!isset($slug)) return $models;

		return isset($models[$slug]) ? $models[$slug] : $model;
	}
}
