<?php

namespace $NAMESPACE$;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Builder;

class $CLASS$ extends Model
{
    use HasFactory;

    protected $guarded = ['id',];

    public static function getAlias(): string
    {
        return __('alias.$CLASS$');
    }

    protected static function newFactory(): \$MODULE_NAMESPACE$\$MODULE$\Database\factories\$NAME$Factory
    {
        return \$MODULE_NAMESPACE$\$MODULE$\Database\factories\$NAME$Factory::new();
    }

    //.................Casts.................
    protected $casts = [
        'status' => 'bool',
    ];

    //.................Relations.................

    //.................Scopes.................
    public function scopeActive(Builder $query): Builder
    {
        return $query->where('status', true);
    }

    //.................Attributes.................
    public function getStatusTextAttribute(): string
    {
        return $this->status ? 'active' : 'inactive';
    }

    public function getStatusTextFaAttribute(): string
    {
        return __('validation.attributes.' . $this->status_text);
    }

    public function getStatusObjAttribute(): array
    {
        return [
            'bool' => $this->status,
            'en' => $this->status_text,
            'fa' => $this->status_text_fa,
        ];
    }

    public function getCreatedAtFormattedAttribute(): string
    {
        return jdate($this->created_at)->format(config('config.date_time_format'));
    }

    public function getCreatedAtObjAttribute(): array
    {
        return [
            'raw' => $this->created_at,
            'formatted' => $this->created_at_formatted,
        ];
    }

    public function getUpdatedAtFormattedAttribute(): string
    {
        return jdate($this->updated_at)->format(config('config.date_time_format'));
    }

    public function getUpdatedAtObjAttribute(): array
    {
        return [
            'raw' => $this->updated_at,
            'formatted' => $this->updated_at_formatted,
        ];
    }

    //.................Functionality.................
}
