<?php

namespace App\Models\Mail;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;

/**
 * Bir e-posta ile bir CRM kaydı (müşteri / satış / operasyon / tedarikçi /
 * kaynak) arasındaki bağ.
 *
 * Bağ ya kullanıcı tarafından elle kurulur (`is_auto = false`) ya da aynı
 * yazışma zincirine gelen cevaplar için senkron sırasında otomatik türetilir
 * (`is_auto = true`). İkisini ayırt etmek gerekir: kullanıcı "bu yazışmayı bu
 * kayıttan çıkar" dediğinde zincirden türeyenlerin de gitmesi beklenir.
 */
class MailLink extends Model
{
    /** Bağın nasıl kurulduğu. `is_auto` = (source !== SOURCE_MANUAL). */
    public const SOURCE_MANUAL = 'manual';   // kullanıcı elle bağladı
    public const SOURCE_THREAD = 'thread';   // aynı yazışmanın devamı
    public const SOURCE_ADDRESS = 'address'; // gönderici adresi panelde kayıtlı

    protected $table = 'mail_links';

    protected $fillable = [
        'agency_id', 'message_id', 'linkable_type', 'linkable_id',
        'thread_key', 'is_auto', 'source', 'created_by',
    ];

    protected $casts = [
        'is_auto' => 'boolean',
    ];

    public function message(): BelongsTo
    {
        return $this->belongsTo(MailMessage::class, 'message_id');
    }

    /** Bağlanan kayıt — Customer, Sale, TourOperation, Supplier ya da Resource. */
    public function linkable(): MorphTo
    {
        return $this->morphTo();
    }
}
