<?php

namespace App\Observers;

use App\Models\SaleReturn;
use App\Models\CashTransaction;
use App\Models\Account;
use App\Models\Product; // Pastikan import ini ada
use Illuminate\Support\Facades\Log;

class SaleReturnObserver
{
    public function created(SaleReturn $saleReturn): void
    {
        // 1. SIAPKAN AKUN-AKUN DARI DB
        // Akun Piutang (Aset)
        $akunPiutang = Account::where('code', '1-2001')->first(); 
        // Akun Retur Penjualan (Pendapatan - Contra)
        $akunReturJual = Account::where('code', '4-2001')->first();
        // Akun Persediaan (Aset)
        $akunPersediaan = Account::where('code', '1-3001')->first();
        // Akun HPP (Beban) - Pastikan akun ini dibuat di master akun jika belum ada
        $akunHPP = Account::where('code', '5-1001')->first(); 

        // 2. JURNAL 1: POTONG PIUTANG (Financial)
        // Kredit Piutang (Source), Debit Retur (Destination)
        if ($akunPiutang && $akunReturJual) {
            CashTransaction::create([
                'branch_id' => $saleReturn->branch_id,
                'transaction_date' => now(),
                'transaction_number' => 'RET-SALE-' . ($saleReturn->return_number ?? $saleReturn->id),
                
                // Expense = Mengurangi Saldo Source (Piutang Berkurang)
                'type' => 'expense', 
                'amount' => $saleReturn->total_refund, 
                
                // Kredit: Piutang Usaha
                'source_account_id' => $akunPiutang->id, 
                // Debit: Retur Penjualan
                'destination_account_id' => $akunReturJual->id, 
                
                'note' => 'Potong Piutang via Retur: ' . ($saleReturn->return_number ?? '-'),
                'user_id' => $saleReturn->user_id ?? auth()->id() ?? 1,
            ]);
        }

        // 3. JURNAL 2: KEMBALIKAN NILAI STOK (Inventory Valuation)
        // Kita hitung total HPP (Modal) dari barang yang diretur
        $totalModal = 0;
        
        // Load items untuk perhitungan
        $saleReturn->load('items.product'); 
        
        if ($saleReturn->items) {
            foreach($saleReturn->items as $item) {
                // Ambil harga beli (buy_price) produk saat ini
                $product = $item->product;
                if ($product) {
                    $hppSatuan = $product->buy_price ?? 0;
                    $totalModal += ($hppSatuan * $item->quantity);
                }
            }
        }

        // Jika ada nilai modal & akun lengkap, buat jurnal balik HPP
        if ($totalModal > 0 && $akunPersediaan && $akunHPP) {
            CashTransaction::create([
                'branch_id' => $saleReturn->branch_id,
                'transaction_date' => now(),
                'transaction_number' => 'COGS-REV-' . ($saleReturn->return_number ?? $saleReturn->id),
                
                // Income = Menambah Saldo Destination (Persediaan Bertambah)
                'type' => 'income', 
                'amount' => $totalModal,
                
                // Kredit: HPP (Beban Berkurang)
                'source_account_id' => $akunHPP->id, 
                // Debit: Persediaan (Aset Bertambah)
                'destination_account_id' => $akunPersediaan->id, 
                
                'note' => 'Balik HPP Retur: ' . ($saleReturn->return_number ?? '-'),
                'user_id' => $saleReturn->user_id ?? auth()->id() ?? 1,
            ]);
        }
    }
}