<?php

namespace App\Libs\Backoffice\Generic\Fields;

use App\Libs\Contracts\Backoffice\DuplicatableField;
use App\Libs\Contracts\Backoffice\SearchableField;
use App\Libs\Contracts\Backoffice\VersionableField;
use App\Libs\Facades\Localization;

class TextAreaField extends BaseField implements SearchableField, VersionableField, DuplicatableField
{

    public function __construct($config)
    {
        unset($config["inList"]);
        parent::__construct($config);

        if (!empty($config["maxLength"])) {
            $this->maxLength = $config["maxLength"];
        } else {
            $this->maxLength = null;
        }
    }

    public function toForm($model, $enabled = true, $hidden = false)
    {
        $html = "";

        if ($this->isMultiLanguage()) {
            $languages = Localization::getSupportedLanguages();
            $defaultLang = Localization::getDefaultLocale();

            foreach ($languages as $language) {
                $fieldName = $this->getName();
                $name = $fieldName."[{$language->id}]";
                $id = $fieldName."_".$language->id;
                $errorKey = $fieldName.".".$language->id;
                $value = null;

                if ($model->exists) {
                    $languageModel = $model->languages->findByLocale($language->id);
                    if (!empty($languageModel)) {
                        $value = $languageModel->$fieldName;
                    }
                }

                $html .= view(
                    "admin.generic.components.forms.textarea",
                    array(
                        "id" => $id,
                        "errorKey" => $errorKey,
                        "name" => $name,
                        "fieldName" => $fieldName,
                        "label" => $this->getLabel(),
                        "value" => $value,
                        "language" => $language->id,
                        "languages" => $languages,
                        "defaultLang" => $defaultLang,
                        "hide" => ($hidden || $language->id != $defaultLang),
                        "enabled" => $enabled,
                        "parentHidden" => ($hidden && !empty($this->parent)),
                        "parent" => $this->parent,
                        "info" => $this->getInfo(),
                        "maxLength" => $this->maxLength,
                        "blocksMode" => $this->blocksMode,
                    ));
            }
        } else {
            $fieldName = $this->getName();
            $value = null;

            if ($model->exists) {
                $value = $model->$fieldName;
            }
            $html .= view(
                "admin.generic.components.forms.textarea",
                array(
                    "id" => $this->getName(),
                    "errorKey" => $this->getName(),
                    "name" => $this->getName(),
                    "fieldName" => $this->getName(),
                    "label" => $this->getLabel(),
                    "value" => $value,
                    "hide" => $hidden,
                    "enabled" => $enabled,
                    "parentHidden" => ($hidden && !empty($this->parent)),
                    "parent" => $this->parent,
                    "info" => $this->getInfo(),
                    "maxLength" => $this->maxLength,
                    "blocksMode" => $this->blocksMode,
                ));
        }

        return $html;
    }

    public function getSearchStructure($model, $view = false)
    {
        $searchData = array();

        $fieldName = $this->getName();

        if ($this->isMultiLanguage()) {
            foreach ($model->languages as $languageModel) {
                if (!empty($languageModel->$fieldName)) {
                    if ($view) {
                        $value = cut_string($languageModel->$fieldName, 500);
                    } else {
                        $value = $languageModel->$fieldName;
                    }
                    $searchData[$languageModel->language_id] = $value;
                } else {
                    $searchData[$languageModel->language_id] = '';
                }

            }
        } else {

                $languages = Localization::getSupportedLanguages();
                foreach ($languages as $language) {
                    if (!empty($model->$fieldName)) {
                        if ($view) {
                            $value = cut_string($model->$fieldName, 500);
                        } else {
                            $value = $model->$fieldName;
                        }
                        $searchData[$language->id] = $value;
                    } else {
                        $searchData[$language->id] = '';
                    }
                }

        }

        return $searchData;
    }
}


