<?php

namespace App\Models\OcorrenciasPCA;

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 Occurrence extends Model
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $connection = 'mysql_gsu';
    protected $table = 'occurrences';
    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    protected $fillable = [
        'id',
        'code',
        'name',
        'phone',
        'email',
        'user_image',
        'description',
        'created_by',
        'latitude',
        'longitude',
        'created_at',
        'updated_at',
    ];

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

    public function occurrencesImages()
    {
        return $this->hasOne(OccurrenceImage::class, 'occurrence_id');
    }

    public function historics()
    {
        return $this->hasMany(OccurrenceHistoric::class, 'occurrence_id');
    }

    /**
     * Retorna a imagem do usuário, substituindo URLs externas pela imagem padrão local
     *
     * @param bool $forPdf Se true, retorna caminho absoluto para PDF
     * @return string
     */
    public function getUserImageUrl(bool $forPdf = false): string
    {
        $userImage = $this->getAttribute('user_image');

        // Se não houver imagem, retorna a imagem padrão local
        if (empty($userImage)) {
            return $forPdf
                ? public_path('pmar/assets/img/profile.jpg')
                : asset('pmar/assets/img/profile.jpg');
        }

        // Se for uma URL externa (http/https), retorna a imagem padrão local
        if (filter_var($userImage, FILTER_VALIDATE_URL)) {
            return $forPdf
                ? public_path('pmar/assets/img/profile.jpg')
                : asset('pmar/assets/img/profile.jpg');
        }

        // Se for um caminho local relativo
        if ($forPdf) {
            return public_path($userImage);
        }

        return asset($userImage);
    }
}
