<?php

namespace App\Models;

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

class Paket extends Model
{
    use HasFactory, SoftDeletes;

    protected $table = 'pakets';
    
    protected $fillable = [
        'nama_paket',
        'slug',
        'jenis_paket',
        'harga',
        'image',
        'keterangan',
        'detail_barang',
        'stok',
        'status',
        'rating',
        'total_rating',
        'minimum_order',
        'maximum_order',
        'ongkir_km',
        'min_jarak'
    ];

    protected $casts = [
        'detail_barang' => 'array',
        'harga' => 'decimal:2',
        'rating' => 'decimal:2',
        'ongkir_km' => 'decimal:2',
        'min_jarak' => 'integer',
    ];

    protected $dates = ['deleted_at'];

    protected $attributes = [
        'status' => 'aktif',
        'rating' => 0.00,
        'total_rating' => 0,
        'minimum_order' => 1,
        'maximum_order' => null
    ];

    // Relasi dengan StockModel (barang)
    public function barangs()
    {
        return $this->belongsToMany(StockModel::class, 'paket_barang', 'paket_id', 'barang_id')
                    ->withPivot('id', 'jumlah')
                    ->withTimestamps();
    }

    // Accessor untuk mendapatkan URL gambar lengkap
    public function getImageUrlAttribute()
    {
        return $this->image ? asset('storage/' . $this->image) : null;
    }

    // Accessor untuk mendapatkan status yang diformat
    public function getStatusLabelAttribute()
    {
        return ucfirst($this->status);
    }

    // Accessor untuk mendapatkan detail barang yang terformat
    public function getDetailBarangFormattedAttribute()
    {
        if (!$this->detail_barang) {
            return [];
        }

        return collect($this->detail_barang)->map(function ($item) {
            return [
                'id' => $item['id'],
                'nama_barang' => $item['nama_barang'],
                'kode_barang' => $item['kode_barang'],
                'kategori' => $item['kategori'],
                'harga_sewa' => number_format($item['harga_sewa'], 0, ',', '.'),
                'jumlah' => $item['jumlah'],
                'deskripsi' => $item['deskripsi'] ?? '',
                'subtotal' => number_format($item['harga_sewa'] * $item['jumlah'], 0, ',', '.')
            ];
        })->all();
    }

    // Method untuk menghitung total harga barang dalam paket
    public function getTotalHargaBarangAttribute()
    {
        if (!$this->detail_barang) {
            return 0;
        }

        return collect($this->detail_barang)->sum(function ($item) {
            return $item['harga_sewa'] * $item['jumlah'];
        });
    }

    // Method untuk mendapatkan daftar barang dalam paket
    public function getBarang()
    {
        return $this->barangs->map(function ($barang) {
            return [
                'id' => $barang->pivot->id,
                'nama' => $barang->nama_barang,
                'jumlah' => $barang->pivot->jumlah
            ];
        })->all();
    }

    public function ongkirKota()
    {
        return $this->hasMany(PaketOngkirKota::class);
    }

    // Relasi dengan model Sewa
    public function sewas()
    {
        return $this->hasMany(Sewa::class);
    }
} 