<?php

namespace App\Models\Siati;

use App\Enums\GendersCurriculo;
use App\Enums\MaritalStatusesCurriculo;
use App\Models\SystemLog;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Support\Str;
use DateTimeInterface;

class Candidate extends Model
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $connection = 'mysql_siati_app';
    protected $table = 'candidates';
    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    protected $fillable = [
        'id',
        'cpf',
        'name',
        'email',
        'address',
        'zip_code',
        'birth_date',
        'special_needs',
        'telephone',
        'cellphone',
        'min_payment',
        'desired_payment',
        'cv_summary',
        'has_experience',
        'active',
        'neighbourhood_id',
        'gender_id',
        'marital_status_id',
        'ethnicity',
        'occupation_id',
        'created_at',
        'updated_at',
    ];

    protected function serializeDate(DateTimeInterface $date)
    {
        return $date->format('Y-m-d H:i:s');
    }

    protected $casts = [
        'gender_id' => GendersCurriculo::class,
        'marital_status_id' => MaritalStatusesCurriculo::class,
    ];

    // Relacionamento de " Muitos para Um "
    public function occupation()
    {
        return $this->belongsTo(Occupation::class, 'occupation_id');
    }
    public function neighbourhood()
    {
        return $this->belongsTo(Neighbourhood::class, 'neighbourhood_id');
    }

    // Relacionamento de " Um para Muitos "
    public function courses()
    {
        return $this->hasMany(CandidateCourses::class, 'candidate_id');
    }
    public function education()
    {
        return $this->hasMany(CandidateEducation::class, 'candidate_id');
    }
    public function experiences()
    {
        return $this->hasMany(CandidateExperiences::class, 'candidate_id');
    }
    public function languages()
    {
        return $this->hasMany(CandidateLanguages::class, 'candidate_id');
    }
    public function skills()
    {
        return $this->hasMany(CandidateSkills::class, 'candidate_id');
    }

    public function logs()
    {
        return $this->hasMany(SystemLog::class, 'model_id', 'id')
            ->where('model', 'siati_app->candidate');
    }
}
