<?php

namespace App\Models;

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 Pessoa extends Model {

    use HasApiTokens,
        HasFactory,
        Notifiable;

    //força a exibição o UUID na lista da blade
    public $incrementing = false;
    protected $keyType = 'string';
    protected $table = 'pessoas';

    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    protected $fillable = [
        'id',
        'created_at',
        'updated_at',
        'user_id',
        'nomeCompleto',
        'nomeMae',
        'nomePai',
        'dtaNascimento',
        'numeroSUS',
        'numeroCI',
        'orgaoExp',
        'dtaExpedicao',
        'nacionalidade',
        'naturalidadeCidade',
        'naturalidadeEstado',
        'racaCor',
        'sexo',
        'escolaridade',
        'numeroMembrosResidencia',
        'profissao',
        'ocupacaoSecundaria',
        'status',
    ];

    private function formatarNome(string $nome): string {
        $nome = trim(mb_strtolower($nome));
        $particulas = ['da', 'de', 'do', 'dos', 'das', 'e'];

        $nome = preg_split('/\s+/', $nome);

        foreach ($nome as &$palavra) {
            if (!in_array($palavra, $particulas)) {
                $palavra = ucfirst($palavra);
            }
        }

        return implode(' ', $nome);
    }

    public function getNomeMaeAttribute() {
        return $this->formatarNome($this->attributes['nomeMae'] ?? '');
    }

    public function getNomePaiAttribute() {
        return $this->formatarNome($this->attributes['nomePai'] ?? '');
    }

    public function pertence() {
        return $this->belongsTo(User::class, "user_id");
    }

    public static function boot() {
        parent::boot();
        static::creating(function ($model) {
            $model->id = Str::uuid();
        });
    }

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