<?php

namespace App\Models;

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

class Sewa extends Model
{
    use HasFactory, SoftDeletes;

    protected $fillable = [
        'user_id',
        'paket_id',
        'kota_id',
        'ongkir',
        'tanggal_mulai',
        'tanggal_selesai',
        'lokasi',
        'catatan',
        'total_harga',
        'status',
        'bukti_pembayaran',
        'tanggal_pembayaran',
        'jenis_jaminan',
        'foto_jaminan',
        'nominal_pembayaran'
    ];

    protected $casts = [
        'tanggal_mulai' => 'datetime',
        'tanggal_selesai' => 'datetime',
        'tanggal_pembayaran' => 'datetime',
    ];

    protected $dates = [
        'tanggal_mulai',
        'tanggal_selesai',
        'tanggal_pembayaran',
        'deleted_at'
    ];

    // Relasi dengan User
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    // Relasi dengan Paket
    public function paket()
    {
        return $this->belongsTo(Paket::class);
    }

    // Relasi dengan PaketOngkirKota
    public function kota()
    {
        return $this->belongsTo(PaketOngkirKota::class, 'kota_id');
    }

    public function chats()
    {
        return $this->hasMany(Chat::class);
    }

    // Accessor untuk status yang lebih mudah dibaca
    public function getStatusLabelAttribute()
    {
        return match($this->status) {
            'pending' => 'Menunggu Konfirmasi',
            'disetujui' => 'Disetujui',
            'ditolak' => 'Ditolak',
            'selesai' => 'Selesai',
            'dibatalkan' => 'Dibatalkan',
            default => ucfirst($this->status)
        };
    }

    // Accessor untuk total durasi sewa dalam hari
    public function getDurasiSewaAttribute()
    {
        return $this->tanggal_mulai->diffInDays($this->tanggal_selesai) + 1;
    }

    // Scope untuk mencari sewa berdasarkan status
    public function scopeStatus($query, $status)
    {
        return $query->where('status', $status);
    }

    // Scope untuk sewa yang aktif
    public function scopeAktif($query)
    {
        return $query->whereIn('status', ['disetujui'])
                    ->where('tanggal_selesai', '>=', now());
    }

    // Scope untuk riwayat sewa
    public function scopeRiwayat($query)
    {
        return $query->whereIn('status', ['selesai', 'dibatalkan', 'ditolak'])
                    ->orWhere('tanggal_selesai', '<', now());
    }
} 