<?php

namespace App\Models\Tabelas\Pesquisa;

use App\Models\Planejamento;
use App\Models\Tabelas\Constants;
use App\Models\Util\CargaHoraria;
use App\Queries\Tabelas\Pesquisa\PesquisaOrientacaoQuery;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Validation\Rule;

class PesquisaOrientacao extends Model
{
    use SoftDeletes;

    protected $table = 'pesquisa_orientacao';

    protected $fillable = ['orientacao_id', 'user_pad_id', 'dimensao', 'cod_atividade', 'titulo_projeto', 'nome_orientando', 'funcao', 'ch_semanal'];

    protected $dates = ['deleted_at'];

    // public function orientacao()
    // {
    //     return $this->hasOne(Orientacao::class);
    // }

    public function dimensaoAsString()
    {
        return Constants::listDimensao($this->dimensao);
    }
        
    public function funcaoAsString()
    {
        return Constants::listFuncaoOrientador($this->funcao);
    }

    public static function rules()
    {
        return [
            'cod_atividade' => ['required', 'string', 'max:255'],
            'titulo_projeto' => ['required', 'string', 'max:255'],
            'nome_orientando' => ['required', 'string', 'max:255'],
            'funcao' => ['required', 'integer', Rule::in(array_keys(Constants::listFuncaoOrientador()))],
            'ch_semanal' => CargaHoraria::ch_semanal(CargaHoraria::create_ch_min(2)),
        ];
    }

    public static function messages()
    {
        return [
            //cod_atividade
            'cod_atividade.required' => 'O campo "Cód. Atividade" é obrigatório!',

            //titulo_projeto
            'titulo_projeto.required' => 'O campo "Título do Projeto" é obrigatório!',

            //nome_orientando
            'nome_orientando.required' => 'O campo "Nome do Orientando" é obrigatório!',

            //funcao
            'funcao.required' => 'O campo "Função" é obrigatório!',
            'funcao.integer' => 'O campo "Função" deve cónter um inteiro!',
            'funcao.in' => 'Selecione uma opção da lista de "Função"!',

            //ch_semanal
            'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
            'ch_semanal.min' => 'Carga horária semanal miníma é de 2 Horas!',
        ];
    }
    
    /**
     * @return array
     */
    public static function getPlanejamentos() {
        $codes = ['P-3'];
        return Planejamento::initQuery()->whereInCodDimensao($codes)->get();
    }

    public static function initQuery()
    {
        return new PesquisaOrientacaoQuery(get_called_class());
    }
}