<?php

namespace app\models;

use Yii;
use yii\helpers\Url;

/**
 * This is the model class for table "authors".
 *
 * @property int $id id
 * @property string $uid Альтернативный id
 * @property string $name Автор
 * @property string $url Страница автора
 * @property string $jobTitle Должность
 * @property string $phone Телефон
 * @property string $active статус
 */
class Authors extends base\BaseFrontendClass
{
	public $photo;
	public static $story_dir = 'images/authors';
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'authors';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['name',  'jobTitle', 'phone','description'], 'required'],
            [['active','text','description'], 'string'],
            [['show'], 'integer'],
            [['uid'], 'string', 'max' => 36],
            [['name', 'jobTitle'], 'string', 'max' => 128],
            [['url'], 'string', 'max' => 255],
            [['phone'], 'string', 'max' => 64],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'id',
            'uid' => 'Альтернативный id',
            'name' => 'Автор',
            'url' => 'Страница автора',
            'jobTitle' => 'Должность',
            'phone' => 'Телефон',
            'active' => 'статус',
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function getAuthor($autor)
    {
		if( is_numeric($autor) ){
			$r = Authors::findOne(['id' => $autor]);
			if( isset($r->id) ) return $r;
		}else
		//ade11199-7292-412e-b98e-6e74234710b4
		if( preg_match('/^([a-z0-9]){8}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){4}\-([a-z0-9]){12}$/', $autor) ){
			$r = Authors::findOne(['uid' => $autor]);
			if( isset($r->id) ) return $r;
		}
		return Authors::findOne(['id' => 5]);
    }

    public function getUrl($full = false):string
    {
        $base = Url::base('https');
		$alias = trim( $this->url );
		if( $alias == '' ) return ($full ? $base : "")."/author/".$this->id;
		if( stripos( $alias, 'http' ) === false ) return ($full ? $base : "")."/author/".$alias;
		return $alias;
    }

     public function getImg($size="_sizehd", $type='jpg'){
		 return $this->getPhoto($size, $type);
	 }
    public function getPhoto($size="_sizehd", $type='jpg'){
		if( $this->id ){
			$file ="/".self::$story_dir."/".$this->id.$size.".".$type;
			if( file_exists(Yii::getAlias('@webroot').$file) ){
				return $file;
			}
		}
		return false;
	}
	/**
     * {@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";
				$this->generatePreview( $file_tmp, $hdfile, 1920, 1080);
				$name = basename($id."_cuthd.jpg");
				$cutfile = 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, $cutfile, 1080, 1080, $cut);
				}else{
					// без обрезки
					$this->generatePreview( $file_tmp, $cutfile, 1080, 1080);
				}

				//			фото на в ленту(можно отдавать поисковикам) сюжета 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."_sizesq1.webp");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $cutfile, $ofile, 320, 320 );
				$name = basename($id."_sizesq1.jpg");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $cutfile, $ofile, 320, 320 );

				$name = basename($id."_sizesq2.webp");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $cutfile, $ofile, 84, 84 );
				$name = basename($id."_sizesq2.jpg");
				$ofile = Yii::getAlias('@webroot').'/'.static::$story_dir."/$name";
				$this->generatePreview( $cutfile, $ofile, 84, 84 );
				return true;
				unlink($file_tmp); // удалить оригинал или оставить?
			}
		}
		return false;
    }

}
