<?php

namespace kernel\app_modules\user_stage\models;

use DateTime;
use Illuminate\Database\Eloquent\Model;

// Добавить @property
/**
 * @property int $id
 * @property int $status
 * @property int $position
 * @property string $title
 * @property string $slug
 * @property string $description
 * @property string $start_date
 * @property string $end_date
 * @property string $user_fields
 * @property string $dateStartFormatedToForm
 * @property string $dateEndFormatedToForm
 */
class UserStage extends Model
{
    const DISABLE_STATUS = 0;
    const ACTIVE_STATUS = 1;

    protected $table = 'user_stage';

    protected $fillable = ['title', 'slug', 'description', 'start_date', 'end_date', 'position', 'status', 'user_fields']; // Заполнить массив. Пример: ['label', 'slug', 'status']

    public static function labels(): array
    {
        // Заполнить массив
        // Пример: [
        //             'label' => 'Заголовок',
        //             'entity' => 'Сущность',
        //             'slug' => 'Slug',
        //             'status' => 'Статус',
        //        ]

        return [
            'title' => 'Заголовок',
            'slug' => 'Slug',
            'description' => 'Описание',
            'start_date' => 'Начало',
            'end_date' => 'Конец',
            'position' => 'Позиция',
            'status' => 'Статус',
            'user_fields' => 'Поля пользователя',
        ];
    }

    /**
     * @return string[]
     */
    public static function getStatus(): array
    {
        return [
            self::DISABLE_STATUS => "Не активный",
            self::ACTIVE_STATUS => "Активный",
        ];
    }

    /**
     * @throws \Exception
     */
    public function getDateStartFormatedToFormAttribute(): string
    {
        $startDate = new DateTime($this->start_date);

        return $startDate->format("Y-m-d");
    }

    /**
     * @throws \Exception
     */
    public function getDateEndFormatedToFormAttribute(): string
    {
        $endDate = new DateTime($this->end_date);

        return $endDate->format("Y-m-d");
    }

    public function userProgress(): \Illuminate\Database\Eloquent\Relations\HasMany
    {
        return $this->hasMany(UserStageProgress::class);
    }

    public function users()
    {
        return $this->belongsToMany(User::class, 'user_stage_progress')
            ->withPivot(['is_completed', 'completed_at', 'status', 'is_closed'])
            ->withTimestamps();
    }

}