<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Booking extends Model
{
    protected $table = 'bookings';
    public $incrementing = false;
    protected $keyType = 'string';

    protected $fillable = [
        'id', 'organization_id', 'campaign_id', 'creator_id',
        'created_by_id', 'assigned_to_id', 'status',
        'type',
        'negotiating_at', 'confirmed_at', 'completed_at',
        'engagement_natural', 'engagement_ads',
        'cast_cost', 'sample_cost', 'shipping_cost', 'price_quote', 'order_code',
        'send_date', 'eta_date'
    ];

    protected $casts = [
        'negotiating_at' => 'datetime',
        'confirmed_at' => 'datetime',
        'completed_at' => 'datetime',
        'engagement_natural' => 'decimal:2',
        'engagement_ads' => 'decimal:2',
        'cast_cost' => 'integer',
        'sample_cost' => 'integer',
        'shipping_cost' => 'integer',
        'price_quote' => 'integer',
        'send_date' => 'date',
        'eta_date' => 'date',
        'created_at' => 'datetime',
        'updated_at' => 'datetime'
    ];

    // Quan hệ tới Organization
    public function organization()
    {
        return $this->belongsTo(Organization::class, 'organization_id', 'id');
    }

    // Quan hệ tới Campaign
    public function campaign()
    {
        return $this->belongsTo(Campaign::class, 'campaign_id', 'id');
    }

    // Quan hệ tới Creator
    public function creator()
    {
        return $this->belongsTo(Creator::class, 'creator_id', 'id');
    }

    // Người tạo Booking (User)
    public function createdBy()
    {
        return $this->belongsTo(User::class, 'created_by_id', 'id');
    }

    // Người được gán Booking (User)
    public function assignedTo()
    {
        return $this->belongsTo(User::class, 'assigned_to_id', 'id');
    }

    // Các Video liên kết với Booking này
    public function videos()
    {
        return $this->hasMany(Video::class, 'booking_id', 'id');
    }

    // Thông tin mở rộng cho booking video
    public function bookingVideo()
    {
        return $this->hasOne(BookingVideo::class, 'booking_id', 'id');
    }

    // Thông tin mở rộng cho booking livestream
    public function bookingLivestream()
    {
        return $this->hasOne(BookingLivestream::class, 'booking_id', 'id');
    }

    // Ghi chú của booking (nhiều người có thể note)
    public function bookingNotes()
    {
        return $this->hasMany(BookingNote::class, 'booking_id', 'id');
    }
}
