<?php

namespace App\Observers;

use App\Models\Purchase;
use App\Models\CashTransaction;
use App\Models\Account;

class PurchaseObserver
{
    public function created(Purchase $purchase): void
    {
        // KITA HANYA PROSES JIKA INI ADALAH "SALDO AWAL" (FLAG is_opening_balance = true)
        if (!$purchase->is_opening_balance) {
            return;
        }

        // 1. SIAPKAN AKUN
        $akunHutang = Account::where('code', '2-1001')->first(); // Hutang Usaha (Kewajiban)
        $akunModal  = Account::where('code', '3-1001')->first(); // Modal Awal (Penyeimbang)

        if ($akunHutang && $akunModal) {
            // 2. BUAT JURNAL OTOMATIS
            // Logika: Kredit Hutang (Hutang Bertambah), Debit Modal Awal (Penyeimbang)
            // Di sistem ini: Source = Kredit, Destination = Debit
            
            CashTransaction::create([
                'branch_id' => $purchase->branch_id,
                'transaction_date' => $purchase->purchase_date,
                'transaction_number' => 'OPN-HUT-' . $purchase->invoice_number,
                
                // PENTING: Type Expense biasanya mengurangi saldo Source.
                // Tapi untuk saldo awal, kita fokus ke Source ID dan Dest ID.
                'type' => 'opening_balance', 
                'amount' => $purchase->grand_total,
                
                // Kredit: Hutang Usaha (Saldo Hutang Bertambah di sisi Kredit)
                'source_account_id' => $akunHutang->id, 
                
                // Debit: Modal Awal (Sebagai penyeimbang Neraca)
                'destination_account_id' => $akunModal->id, 
                
                'note' => 'Saldo Awal Hutang: ' . $purchase->supplier->name,
                'user_id' => auth()->id() ?? 1,
            ]);
        }
    }
}