<?php
namespace app\models;

use Yii;
use yii\base\Model;
use DateTime;

class Functions extends Model
{

  public static function check_module_permission($id_module)
  {

    if(\app\models\CrmRolesModules::find()->where(["id_role" => Yii::$app->getUser()->identity->role])->andWhere(["id_module" => $id_module])->one()){
      return true;
    } else {
      return false;
    }

  }

  public static function check_function_permission($id_module,$function)
  {

    if(\app\models\CrmRolesFunctions::find()
    ->where(["id_role" => Yii::$app->getUser()->identity->role])
    ->andWhere(["id_function" => \app\models\CrmFunctions::find()->where(["id_module" => $id_module])->andWhere(["name" => $function])->one()->id])->one()){
      return true;
    } else {
      return false;
    }

  }

  public static function clean_string($string)
  {

    $string = strtolower($string);
    $string = str_replace(' ', '-', $string);
    $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);

    return $string;

  }

  public static function extract($string)
  {

    $extract = preg_replace('/\[\/?(?:b|i|u|s|center|quote|url|ul|ol|list|li|\*|code|table|tr|th|td|youtube|gvideo|(?:(?:size|color|quote|name|url|img)[^\]]*))\]/', '', $string);
    if (strlen($string) > 30){ $extract = substr($extract, 0, 30) . "..."; }

    return $extract;

  }
  
  public static function projects_total()
  {

    return \app\models\CrmProjects::find()->count();

  }
  
  public static function projects_yet_to_start_total()
  {

    return \app\models\CrmProjects::find()->where(["status" => 1])->count();

  }
  
  public static function projects_in_progress_total()
  {

    return \app\models\CrmProjects::find()->where(["status" => 2])->count();

  }
  
  public static function projects_completed_total()
  {

    return \app\models\CrmProjects::find()->where(["status" => 3])->count();

  }
  
	public static function truncate($text, $chars = 25) {
		if (strlen($text) <= $chars) {
			return $text;
		}
		$text = $text." ";
		$text = substr($text,0,$chars);
		$text = substr($text,0,strrpos($text,' '));
		$text = $text."...";
		return $text;
	}
	
	public static function get_milliseconds($date){
		$the_date_time = new DateTime($date);
		$the_date_time_in_ms = ($the_date_time->format('U') * 1000) + ($the_date_time->format('u') / 1000);
		
		return $the_date_time_in_ms;
	}
	
	public static function clean_number($number){
		
		$number = str_replace(".","",$number);
		$number = str_replace(",",".",$number);
		
		return $number; 
	}
	
	public static function inserimento_csv($filename){
		
		$columns = array('Group', 'Surname', 'Name', 'Gender', 'Height', 'Address', 'City', 'Phone', 'Cellphone', 'MQI', 'Email', 'ExamDate', 'ExamHour', 'Age', 'Weight', 'Rz', 'Xc', 'FFM', 'TBW', 'ECW', 'BCM', 'FM', 'PA', 'NAK', 'FM%', 'FFM%', 'TBW%', 'ECW%', 'ICW%', 'MM', 'MM%', 'BMR', 'BMI', 'BCMI', 'IdealWeight', 'ECM', 'PatientCode', 'Hydration', 'Nutrition', 'SMI', 'SMM', 'ASMM', 'FMI', 'FFMI', 'BirthDate', 'SPA', 'AntropometricDate', 'WaistLine', 'HipMeasurement', 'WaistHipRelation', 'WaistHeightRelation', 'ArmCircumference', 'BreastCircumference', 'LegCircumference', 'AbdominalFat', 'AbdominalCircumference', 'WristCircumference', 'CalfCircumference');
		
		$file = fopen("uploads/users_data/".$filename.".csv", "r");
		
		#INSERIMENTO CSV NELLA TABELLA  "ptelite_users_data_check"(Inizio)
		Yii::$app->db->createCommand()->truncateTable('ptelite_users_data_check')->execute();
		$count = 0;
		$user_count = 0;
		$contr = 0;
		while (($data = fgetcsv($file, 1000, ";")) !== FALSE) {
			$count++;
			
			#CONTROLLO COLONNE CSV (Inizio)
			if($count == 1){
				for ($i = 0; $i <= 57; $i++) {
					$col[$i] = $data[$i];
				}
				
				$controlloColonne = 0;
				for ($i = 0; $i <= 57; $i++) {
					if($col[$i] != $columns[$i]){
						$controlloColonne = 1;
					}
				}
				
				if($controlloColonne == 1){
					return 1;
					break;
				}
			}
			#CONTROLLO COLONNE CSV (Fine)
			
			if($count > 1){
				
				for ($i = 0; $i <= 57; $i++) {
					$col[$i] = $data[$i];
				}
				
				//exam_date
				if(!strpos($col[11],"-")){
					$data_array = explode("/",$col[11]);
					if(strlen($data_array[0]) == 2){
						$exam_date = $data_array[2]."-".$data_array[1]."-".$data_array[0];
					}
					if(strlen($data_array[0]) == 4){
						$exam_date = $data_array[0]."-".$data_array[1]."-".$data_array[2];
					}
				}

				if(strpos($col[11],"-")){
					$data_array = explode("-",$col[11]);
					if(strlen($data_array[0]) == 2){
						$exam_date = $data_array[2]."-".$data_array[1]."-".$data_array[0];
					}
					if(strlen($data_array[0]) == 4){
						$exam_date = $data_array[0]."-".$data_array[1]."-".$data_array[2];
					}
				}
				
				//birth_date
				if(!strpos($col[44],"-")){
					$birth_date_array = explode("/",$col[44]);
					if(strlen($birth_date_array[0]) == 2){
						$birth_date = $birth_date_array[2]."-".$birth_date_array[1]."-".$birth_date_array[0];
					}
					if(strlen($birth_date_array[0]) == 4){
						$birth_date = $birth_date_array[0]."-".$birth_date_array[1]."-".$birth_date_array[2];
					}
				}

				if(strpos($col[44],"-")){
					$birth_date_array = explode("-",$col[44]);
					if(strlen($birth_date_array[0]) == 2){
						$birth_date = $birth_date_array[2]."-".$birth_date_array[1]."-".$birth_date_array[0];
					}
					if(strlen($birth_date_array[0]) == 4){
						$birth_date = $birth_date_array[0]."-".$birth_date_array[1]."-".$birth_date_array[2];
					}
				}
				
				$User = \app\models\User::find()
				->where(["email" => $col[10]])
				->one();
				if(!$User){
					continue;
				}
				
				
				$user_count++;
				
				$PteliteUsersDataCheck = new \app\models\PteliteUsersDataCheck();
				$PteliteUsersDataCheck->id_user = $User->id;
				$PteliteUsersDataCheck->user_group = $col[0];
				$PteliteUsersDataCheck->surname = $col[1];
				$PteliteUsersDataCheck->name = $col[2];
				$PteliteUsersDataCheck->gender = $col[3];
				$PteliteUsersDataCheck->height = $col[4];
				$PteliteUsersDataCheck->address = $col[5]?str_replace(',', '.', $col[5]):NULL;
				$PteliteUsersDataCheck->city = $col[6]?str_replace(',', '.', $col[6]):NULL;
				$PteliteUsersDataCheck->phone = $col[7]?str_replace(',', '.', $col[7]):NULL;
				$PteliteUsersDataCheck->cellphone = $col[8]?str_replace(',', '.', $col[8]):NULL;
				$PteliteUsersDataCheck->mqi = $col[9]?str_replace(',', '.', $col[9]):NULL;
				$PteliteUsersDataCheck->email = $col[10];
				$PteliteUsersDataCheck->exam_date = $exam_date;
				$PteliteUsersDataCheck->exam_hour = $col[12];
				$PteliteUsersDataCheck->age = $col[13];
				$PteliteUsersDataCheck->weight = \app\models\Functions::clean_number($col[14]);
				$PteliteUsersDataCheck->rz = $col[15];
				$PteliteUsersDataCheck->xc = $col[16];
				$PteliteUsersDataCheck->ffm = $col[17];
				$PteliteUsersDataCheck->tbw = $col[18];
				$PteliteUsersDataCheck->ecw = \app\models\Functions::clean_number($col[19]);
				$PteliteUsersDataCheck->bcm = $col[20];
				$PteliteUsersDataCheck->fm = \app\models\Functions::clean_number($col[21]);
				$PteliteUsersDataCheck->pa = \app\models\Functions::clean_number($col[22]);
				$PteliteUsersDataCheck->nak = $col[23];
				$PteliteUsersDataCheck->fm_perc = \app\models\Functions::clean_number($col[24]);
				$PteliteUsersDataCheck->ffm_perc = $col[25];
				$PteliteUsersDataCheck->tbw_perc = $col[26];
				$PteliteUsersDataCheck->ecw_perc = \app\models\Functions::clean_number($col[27]);
				$PteliteUsersDataCheck->icw_perc = $col[28];
				$PteliteUsersDataCheck->mm = \app\models\Functions::clean_number($col[29]);
				$PteliteUsersDataCheck->mm_perc = $col[30];
				$PteliteUsersDataCheck->bmr = \app\models\Functions::clean_number($col[31]);
				$PteliteUsersDataCheck->bmi = $col[32];
				$PteliteUsersDataCheck->bcmi = $col[33];
				$PteliteUsersDataCheck->ideal_weight = $col[34];
				$PteliteUsersDataCheck->ecm = $col[35];
				$PteliteUsersDataCheck->patient_code = $col[36];
				$PteliteUsersDataCheck->hydration = $col[37];
				$PteliteUsersDataCheck->nutrition = $col[38];
				$PteliteUsersDataCheck->smi = $col[39];
				$PteliteUsersDataCheck->smm = $col[40];
				$PteliteUsersDataCheck->asmm = $col[41];
				$PteliteUsersDataCheck->fmi = $col[42];
				$PteliteUsersDataCheck->ffmi = $col[43];
				$PteliteUsersDataCheck->birth_date = $birth_date;
				$PteliteUsersDataCheck->spa = $col[45];
				$PteliteUsersDataCheck->antropometric_date = $col[46];
				$PteliteUsersDataCheck->waist_line = $col[47];
				$PteliteUsersDataCheck->hip_measurement = $col[48];
				$PteliteUsersDataCheck->waist_hip_relation = $col[49];
				$PteliteUsersDataCheck->waist_height_relation = $col[50];
				$PteliteUsersDataCheck->arm_circumference = $col[51];
				$PteliteUsersDataCheck->breast_circumference = $col[52];
				$PteliteUsersDataCheck->leg_circumference = $col[53];
				$PteliteUsersDataCheck->abdominal_fat = $col[54];
				$PteliteUsersDataCheck->abdominal_circumference = $col[55];
				$PteliteUsersDataCheck->wrist_circumference = $col[56];
				$PteliteUsersDataCheck->calf_circumference = $col[57];
				$PteliteUsersDataCheck->save(false);
				
				

			}

		}
		
		fclose($file);
		#INSERIMENTO CSV NELLA TABELLA  "ptelite_users_data_check"(Fine)
		
	}
	
	public static function controllo_csv(){
		
		/*
		$subquery = (new \yii\db\Query())
		->select('MIN(exam_date)')
		->from('ptelite_users_data_check p2')
		->where('p2.email = ptelite_users_data_check.email');

		$query = \app\models\PteliteUsersDataCheck::find()
			->where(['exam_date' => $subquery])
			->andWhere([
				'OR',
				['IS NOT', 'address', null],
				['IS NOT', 'city', null],
				['IS NOT', 'phone', null],
				['IS NOT', 'cellphone', null],
				['IS NOT', 'mqi', null],
			])
			->andWhere([
				'OR',
				['AND',
					['IS NOT', 'address', null],
					['OR',
						['IS', 'city', null],
						['IS', 'phone', null],
						['IS', 'cellphone', null],
						['IS', 'mqi', null],
					],
				],
				['AND',
					['IS NOT', 'city', null],
					['OR',
						['IS', 'address', null],
						['IS', 'phone', null],
						['IS', 'cellphone', null],
						['IS', 'mqi', null],
					],
				],
				['AND',
					['IS NOT', 'phone', null],
					['OR',
						['IS', 'address', null],
						['IS', 'city', null],
						['IS', 'cellphone', null],
						['IS', 'mqi', null],
					],
				],
				['AND',
					['IS NOT', 'cellphone', null],
					['OR',
						['IS', 'address', null],
						['IS', 'city', null],
						['IS', 'phone', null],
						['IS', 'mqi', null],
					],
				],
				['AND',
					['IS NOT', 'mqi', null],
					['OR',
						['IS', 'address', null],
						['IS', 'city', null],
						['IS', 'phone', null],
						['IS', 'cellphone', null],
					],
				],
			]);
			*/
		
		$query = \app\models\PteliteUsersDataCheck::find()
		->where([
			'OR',
			['address' => null],
			['city' => null],
			['phone' => null],
			['cellphone' => null],
			['mqi' => null],
		]);
		$count = $query->count();
		
		return $count;
			
		
	}
	
	public static function get_percentuale($range_min,$range_max,$value){
		
		/*
		$valore_minimo_starting = $PteliteCertificationsValuesRanges_fm_starting->range_min;
		$valore_massimo_starting = $PteliteCertificationsValuesRanges_fm_starting->range_max;
		$delta_starting = $valore_massimo_starting-$valore_minimo_starting;
		$delta_starting_wished = $PteliteUsersCertifications->user_data_starting->fm_perc-$valore_minimo_starting;
		$percentuale = ($delta_starting_wished/$delta_starting)*100;
		*/
		
		
		$delta_starting = $range_max-$range_min;
		$delta_starting_wished = $value-$range_min;
		$percentuale = ($delta_starting_wished/$delta_starting)*100;
		
		return $percentuale;
			
	}

}
