<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Support\Str;

class Participant extends Model
{
    use HasFactory;

    protected $fillable = [
        'uuid', 'name', 'no_kp', 'email', 'phone', 'agency', 'participant_type',
    ];

    protected static function boot(): void
    {
        parent::boot();
        static::creating(fn($model) => $model->uuid ??= (string) Str::uuid());
    }

    public function programs()
    {
        return $this->belongsToMany(Program::class, 'program_participants')
                    ->withPivot(['registration_source', 'is_pre_registered', 'pre_registered_session', 'status', 'registered_at'])
                    ->withTimestamps();
    }

    public function programParticipants()
    {
        return $this->hasMany(ProgramParticipant::class);
    }

    public function attendances()
    {
        return $this->hasMany(Attendance::class);
    }

    public function certificates()
    {
        return $this->hasMany(Certificate::class);
    }

    public function questionnaireResponses()
    {
        return $this->hasMany(QuestionnaireResponse::class);
    }

    public function attendanceForProgram(int $programId): ?Attendance
    {
        return $this->attendances()->where('program_id', $programId)->first();
    }

    public function hasAnsweredQuestionnaire(int $programId, int $questionnaireSetId): bool
    {
        return $this->questionnaireResponses()
                    ->where('program_id', $programId)
                    ->where('questionnaire_set_id', $questionnaireSetId)
                    ->exists();
    }
}
