<?php

namespace app\models;
use  \app\helpers\Transliterator;
use Yii;

/**
 * This is the model class for table "person".
 *
 * @property string $name
 * @property string $jobtitle
 * @property string|null $birthdate
 * @property string $description
 * @property int $id
 */
class Person extends base\BaseFrontendClass
{
	/**
     * @var string
     */
    public $photo;
	public static $story_dir = '/images/person-images';

    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'person';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['name', 'jobtitle', 'description'], 'required'],
            [['name', 'jobtitle', 'description', 'alias','show','phone','email'], 'string'],
            [['birthdate'], 'safe'],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'name' => 'Имя',
            'jobtitle' => 'Должность или звание',
            'birthdate' => 'День рождения',
            'description' => 'Описание',
            'id' => 'ID',
            'alias' => 'url',
            'phone' => 'Телефон',
            'email' => 'email',
			'show' => 'Показывать'
        ];
    }

	public function beforeSave($insert)
	{
		if (!parent::beforeSave($insert)) {
			return false;
		}
		if( is_int($this->show) || is_numeric($this->show) ){
			$this->show = ((int) $this->show == 1)?'Y':'N';
		}
		$this->birthdate = date('Y-m-d', strtotime($this->birthdate));
		if( trim($this->alias) == '' ){
			$this->alias = Transliterator::toUrl($this->name);
		}
		return true;
	}

    public function getImg($size = 'hd', $type = 'webp'){
        return static::$story_dir."/".$this->id."_size{$size}.{$type}";
    }

	/**
     * {@inheritdoc}
     * @return status.
     */
	public function saveImg($id, $file, $type)
    {
		$post = Yii::$app->request->post();
		$pcut = isset($post['cropping'])?$post['cropping']:false;
		$t = ['image/jpeg'=>'jpg','image/png'=>'png', 'image/webp'=>'webp']; //расширить допустимый список и вынести в общий класс
		if( isset( $t[$type] ) ){
			$ext = $t[$type];

			//загрузка временной фото на обработку
			$name = basename($id."_origin.".$ext);
			$file_tmp = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
			if( move_uploaded_file($file, $file_tmp) ){

				//			фото исходник для дальнейшей обработки
				$name = basename($id."_sizehd.jpg");
				$hdfile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				if( $pcut ){
					$cut = ['x'=>round($pcut['x']), 'y'=>round($pcut['y']), 'w'=>round($pcut['width']), 'h'=>round($pcut['height'])];
					$this->generateImageCrop($file_tmp, $hdfile, 1920, 1080, $cut);
				}else{
					// без обрезки
					$this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
				}
				//unlink($file_tmp); удалить оригинал или оставить?

				//			фото на главную сюжета 1300х731
				$name = basename($id."_size1.webp");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 1300, 731);
				$name = basename($id."_size1.jpg");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 1300, 731);

				//			фото на в ленту(можно отдавать поисковикам) сюжета 680x383
				$name = basename($id."_size2.webp");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 680, 383);
				$name = basename($id."_size2.jpg");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 680, 383);

				// size3 пропустим в текущем дизайне не применим
				//			фото на в малая(можно отдавать в админку, инжекты и пр. лабудень) сюжета 320х180
				$name = basename($id."_size4.webp");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 320, 180 );
				$name = basename($id."_size4.jpg");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $hdfile, $ofile, 320, 180 );
				return true;
			}
		}
		return false;
    }

}
