<?php

class Workflowvalue extends mfBaseModel {
  private $item;
  private $changer;
  public $gps = [];
  
  public $is_changed = false;
  
  protected function afterLoad() {
    if(!$this->id) {
      return true;
    }
    if($this->getProperty("item")->type == "gps" && $this->value_string) {
      $gps = explode(";", $this->value_string);
      $this->gps = $gps;
    }
  }
  
  protected function beforeSave() {
    if($this->new() == "new") {
      $me = new User();
      $me->loadMe();
      $this->changed = date('U');
      $this->changed_by = $me->id;
    }
  }
  
  public function setValue($value) {
    $this->item = $this->getProperty("item");
    
    if($this->item->type == "delimiter" || $this->item->type == "empty") {
      return true;
    }
    
    $value_type = "string";
    
    switch($this->item->type) {
      case "string":
        $value_type = "string";
        break;
      case "enum":
        $value_type = "string";
        break;
      case "gps":
        $value_type = "string";
        break;
      case "color":
        $value_type = "string";
        break;
      case "date":
        $value_type = "string";
        break;
      case "int":
        $value_type = "int";
        break;
      case "bool":
        $value_type = "int";
        break;
      case "file":
        $value_type = "int";
        break;
      case "text":
        $value_type = "text";
        break;
    }
    
    
    
    if($this->item->type == "gps") {
      if(is_array($value) && count($value) == 2) {
        $lat = $value['lat'];
        $long = $value['long'];
        $value = "$lat;$long";
        if($lat == null && $long == null) {
          $value = null;
        }
      } else {
        $value = null;
      }
    }
    
    /*if($this->item->name == "customer_passive_finished") {
      var_dump($value, $this->{"value_".$value_type});exit;
    }*/
    
    if($value === null) {
      return true;
    }
    
    if($value_type == "int" && $this->{"value_".$value_type} == null && !$value) {
      return true;
    }
    
    if($this->item->type == "bool" && $this->{"value_".$value_type} == null && $value == 0) {
      return true;
    }
    
    if($value == null && $this->{"value_".$value_type} == null) {
      return true;
    }
    
    $this->is_changed = true;
    
    $me = new User();
    $me->loadMe();

    if($this->{"value_".$value_type} != $value) {
      $this->{"value_".$value_type} = $value;
      $this->changed = date('U');
      $this->changed_by = $me->id;
    }
    
    /*if($this->new() == "new") {
      $this->changed = date('U');
      $this->changed_by = $me->id;
    }*/

  }
  
  public function getProperty($name) {
    if($this->$name == null) {
      
      if($name == "item") {
        $this->item = new Workflowitem($this->item_id);
        return $this->item;
      }
   
      if($name == "changer") {
        if($this->changed && $this->changed_by) {
          $this->changer = new User($this->changed_by);
          return $this->changer;
        } else {
          return new Address();
        }
      }
      
      $classname = ucfirst($name);
      $idfield = $name."_id";
      $this->$name = new $classname($this->$idfield);
      
      if($this->$name->id) {
        return $this->$name;
      } else {
        return null;
      }
    }
    
    return $this->$name;
  }
}