<?php

class formContentCategory extends cmsForm {

    public function init($ctype, $action) {

        $model = cmsCore::getModel('content');

        $table_name = $model->getContentCategoryTableName($ctype['name']);

        $fieldsets = [
            'base' => [
                'title'  => LANG_BASIC_OPTIONS,
                'type'   => 'fieldset',
                'childs' => [
                    new fieldString('title', [
                        'title' => LANG_CATEGORY_TITLE,
                        'can_multilanguage' => true,
                        'multilanguage_params' => [
                            'is_table_field' => true,
                            'table' => $table_name
                        ],
                        'options' => [
                            'max_length' => 200
                        ],
                        'rules' => [
                            ['required']
                        ]
                    ]),
                    new fieldList('parent_id', [
                        'title' => LANG_PARENT_CATEGORY,
                        'generator' => function ($cat) use ($ctype, $model) {

                            $tree = $model->limit(0)->getCategoriesTree($ctype['name']);

                            if ($tree) {
                                foreach ($tree as $item) {
                                    // при редактировании исключаем себя и вложенные
                                    // подкатегории из списка выбора родителя
                                    if (isset($cat['ns_left'])) {
                                        if ($item['ns_left'] >= $cat['ns_left'] && $item['ns_right'] <= $cat['ns_right']) {
                                            continue;
                                        }
                                    }
                                    $items[$item['id']] = str_repeat('- ', $item['ns_level']) . ' ' . $item['title'].($item['is_hidden'] ? ' ⚡️' : '');
                                }
                            }

                            return $items;
                        }
                    ]),
                    new fieldHtml('description', [
                        'title' => LANG_CATEGORY_DESCRIPTION,
                        'can_multilanguage' => true,
                        'multilanguage_params' => [
                            'is_table_field' => true,
                            'table' => $table_name
                        ]
                    ]),
                    new fieldCheckbox('is_hidden', [
                        'title' => LANG_CATEGORY_IS_HIDDEN
                    ])
                ]
            ]
        ];

        // Если заданы пресеты
        if (!empty($ctype['options']['cover_sizes'])){

            $fieldsets['cat_cover'] = [
                'type'   => 'fieldset',
                'title'  => LANG_CATEGORY_COVER,
                'childs' => [
                    new fieldImage('cover', [
                        'options' => [
                            'allow_import_link' => true,
                            'sizes' => $ctype['options']['cover_sizes']
                        ]
                    ])
                ]
            ];
        }

        // Если ручной ввод ключевых слов или описания, то добавляем поля для этого
        if (!empty($ctype['options']['is_cats_title']) ||
                !empty($ctype['options']['is_cats_h1']) ||
                !empty($ctype['options']['is_cats_keys']) ||
                !empty($ctype['options']['is_cats_desc'])) {

            $fieldsets['cat_seo'] = [
                'type'   => 'fieldset',
                'title'  => LANG_SEO,
                'childs' => []
            ];

            if (!empty($ctype['options']['is_cats_h1'])){

                $fieldsets['cat_seo']['childs'][] = new fieldString('seo_h1', [
                    'title'   => LANG_SEO_H1,
                    'can_multilanguage' => true,
                    'multilanguage_params' => [
                        'is_table_field' => true,
                        'table' => $table_name
                    ],
                    'options' => [
                        'max_length' => 256,
                        'show_symbol_count' => true
                    ]
                ]);
            }

            if (!empty($ctype['options']['is_cats_title'])) {

                $fieldsets['cat_seo']['childs'][] = new fieldString('seo_title', [
                    'title'   => LANG_SEO_TITLE,
                    'can_multilanguage' => true,
                    'multilanguage_params' => [
                        'is_table_field' => true,
                        'table' => $table_name
                    ],
                    'options' => [
                        'max_length' => 256,
                        'show_symbol_count' => true
                    ]
                ]);
            }

            if (!empty($ctype['options']['is_cats_keys'])) {

                $fieldsets['cat_seo']['childs'][] = new fieldString('seo_keys', [
                    'title'   => LANG_SEO_KEYS,
                    'hint'    => LANG_SEO_KEYS_HINT,
                    'can_multilanguage' => true,
                    'multilanguage_params' => [
                        'is_table_field' => true,
                        'table' => $table_name
                    ],
                    'options' => [
                        'max_length' => 256,
                        'show_symbol_count' => true
                    ]
                ]);
            }

            if (!empty($ctype['options']['is_cats_desc'])) {

                $fieldsets['cat_seo']['childs'][] = new fieldText('seo_desc', [
                    'title'         => LANG_SEO_DESC,
                    'hint'          => LANG_SEO_DESC_HINT,
                    'can_multilanguage' => true,
                    'multilanguage_params' => [
                        'is_table_field' => true,
                        'table' => $table_name
                    ],
                    'is_strip_tags' => true,
                    'options'       => [
                        'max_length' => 256,
                        'show_symbol_count' => true
                    ]
                ]);
            }
        }

        // Если ручной ввод SLUG, то добавляем поле для этого
        if (empty($ctype['options']['is_cats_auto_url']) && cmsCore::getLanguageName() === cmsConfig::get('language')){

            $fieldsets['cat_seo_slug'] = [
                'type'   => 'fieldset',
                'title'  => LANG_SLUG,
                'childs' => [
                    new fieldString('slug_key', [
                        'rules' => [
                            ['required'],
                            ['max_length', 255],
                            [function ($controller, $data, $value) use ($ctype) {

                                $ctype_default = cmsConfig::get('ctype_default') ?? [];

                                if ($ctype_default && in_array($ctype['name'], $ctype_default)) {
                                    // УРЛ наборов
                                    if (mb_strpos($value, $ctype['name'] . '-') === 0) {
                                        return ERR_VALIDATE_INVALID;
                                    }
                                }

                                return true;
                            }]
                        ]
                    ])
                ]
            ];
        }

        // для администраторов показываем поля доступа
        if (cmsUser::isAdmin()) {

            $fieldsets['cat_perms'] = [
                'type'   => 'fieldset',
                'title'  => LANG_PERMISSIONS,
                'childs' => [
                    new fieldListGroups('allow_add', [
                        'title'       => LANG_CONTENT_CATS_ALLOW_ADD,
                        'hint'        => LANG_CONTENT_CATS_ALLOW_ADD_HINT,
                        'show_all'    => true,
                        'show_guests' => false
                    ])
                ]
            ];
        }

        return $fieldsets;
    }

}
