<?php

namespace common\models;

use Yii;
use yii\base\ErrorException;
use yii\base\Exception;
use yii\helpers\Html;

/**
 * This is the model class for table "fields_value_new".
 *
 * @property int $id
 * @property int $field_id
 * @property int $item_id
 * @property int $item_type
 * @property int $order
 * @property string $value
 * @property string $option
 * @property string $type_file
 */
class FieldsValueNew extends \yii\db\ActiveRecord
{
    const TYPE_PROFILE = 0;
    const TYPE_PROJECT = 1;
    const TYPE_COMPANY = 2;
    const TYPE_BALANCE = 3;
    const TYPE_NOTE = 4;
    const TYPE_ACCESS = 5;

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

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['field_id', 'item_id', 'item_type'], 'required'],
            [['field_id', 'item_id', 'item_type', 'order'], 'integer'],
            [['value', 'type_file'], 'string'],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'field_id' => 'Field ID',
            'item_id' => 'Item ID',
            'item_type' => 'Item Type',
            'order' => 'Order',
            'value' => 'Value',
            'type_file' => 'Тип файла'
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getField()
    {
        return $this->hasOne(AdditionalFields::class, ['id' => 'field_id']);
    }
    
    /**
     * get value for view
     * @return string
     */
    public function getValue()
    {
        $test = $this->type_file === 'file' ? $this->getFileValue() : $this->getTextValue();
        return $test;
    }

    /**
     * @return string
     */
    private function getFileValue()
    {
        $filename = $this->getFileName();
        $filePath = Yii::getAlias('@frontend/web' . $this->value);
        if ($this->isImage()) {
            $imageHTML = Html::img($this->value, ['width' => '200px', 'alt' => $filename]);
            $downloadLinkHTML = ' (' . Html::a('Скачать', $this->value, ['target' => '_blank', 'download' => $filename]) . ')';
            $result = $imageHTML . $downloadLinkHTML;
        } else {
            $imageHTML = Html::img('/media/file.png', ['width' => '100px', 'alt' => $filename]);
            $downloadLinkHTML = ' (' . Html::a('Скачать', $this->value, ['target' => '_blank', 'download' => $filename]) . ')';;
            $result = $imageHTML . $filename . $downloadLinkHTML;
        }
        return $result;
    }

    /**
     * @return string
     */
    private function getTextValue()
    {
        return $this->value;
    }

    /**
     * @return mixed|string
     */
    public function getFileName()
    {
        if ($this->type_file === 'file') {
            $explode = explode('/', $this->value);
            $filename = array_pop($explode);
            return $filename;
        }
        return $this->value;
    }

    /**
     * File is image?
     * @return bool
     */
    public function isImage()
    {
        if ($this->type_file === 'text') {
            return false;
        }

        try {
            $mime = mime_content_type(Yii::getAlias('@frontend/web' . $this->value));
        } catch (ErrorException $e) {
            return false;
        }

        $extension = explode('/', $mime)['0'];
        if ($extension === 'image') {
            return true;
        } else {
            return false;
        }
    }

}
