<?php

namespace App\Repositories\Eloquent;

use App\Models\ProfessionalSpecialty;
use App\Repositories\Interfaces\ProfessionalSpecialtyRepositoryInterface;

class ProfessionalSpecialtyRepository extends BaseRepository implements ProfessionalSpecialtyRepositoryInterface
{
    /**
    * ProfessionalSpecialtyRepository constructor.
    *
    * @param ProfessionalSpecialty $model
    */
    public function __construct(ProfessionalSpecialty $model)
    {
       parent::__construct($model);
    }

    public function syncForProfessional(int $userId, int $professionalId, array $specialtyIds): void
    {
        $this->model->where('professional_id', $professionalId)->delete();
        foreach (array_unique($specialtyIds) as $specialtyId) {
            $this->model->create(['user_id' => $userId, 'professional_id' => $professionalId, 'specialty_id' => $specialtyId]);
        }
    }

    public function syncTagsForProfessional(int $userId, int $professionalId, int $professionId, array $tags): void
    {
        // Profile tags are free-form labels and must remain separate from the
        // profession/sub-profession taxonomy used by the booking form.
        $this->model->where('professional_id', $professionalId)
            ->whereNotNull('custom_name')
            ->delete();

        $uniqueTags = collect($tags)
            ->map(fn ($tag) => trim((string) $tag))
            ->filter()
            ->unique(fn ($tag) => mb_strtolower($tag))
            ->values();

        foreach ($uniqueTags as $tag) {
            $this->model->create([
                'user_id' => $userId,
                'professional_id' => $professionalId,
                'specialty_id' => null,
                'custom_name' => $tag,
            ]);
        }
    }
}
