<?php

namespace App\Models;

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

class Product extends Model
{
    use HasFactory;

    public $table = 'products';

    protected $dates = [
        'created_at',
        'updated_at'
    ];

    protected $casts = [
        'live_date' => 'datetime',
        'finish_date' => 'datetime'
    ];

    protected $fillable = [
        'name',
        'name_ar',
        'cat_id',
        'sku',
        'purchase_price',
        'price',
        'product_quantity',
        'highest_bid_amount',
        'commission_percentage',
        'user_id',
        'description',
        'description_ar',
        'cover_image',
        'cover_image_thumb_73X68',
        'cover_image_thumb_375X233',
        'live_date',
        'duration_day',
        'finish_date',
        'status',
        'condition',
        'bidding_incremented_price',
        'product_type',
        'is_sell',
        'current_notified_user_id',
        'payment_done',
        'notified_at',
        'is_admin'
    ];

    public function images()
    {
        return $this->hasMany(ProductImage::class, 'product_id');
    }

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function likes()
    {
        return $this->hasMany(ProductLike::class, 'product_sku', 'sku');
    }

    public function category()
    {
        return $this->belongsTo(Category::class, 'cat_id', 'id');
    }

    public function bids()
    {
        return $this->hasMany(Bid::class, 'product_sku', 'sku');
    }

    public function documents()
    {
        return $this->hasMany(ProductDocuments::class, 'product_id');
    }

    public function cartitem()
    {
        return $this->hasMany(ProductLike::class, 'product_sku', 'sku');
    }
	
	public function shippingDetails()
	{
		return $this->hasMany(ShippingDetails::class, 'product_sku', 'sku');
	}

    public function receipts()
    {
        return $this->hasMany(ProductReceipt::class, 'product_sku', 'sku');
    }

    public function orders()
    {
        return $this->hasMany(Orders::class, 'product_sku', 'sku');
    }

    public function buyer()
    {
        return $this->hasOneThrough(User::class, Orders::class, 'product_sku', 'id', 'sku', 'user_id');
    }
}
