<?php

namespace App\DataObjects;

use App\Models\Account;
use Spatie\LaravelData\Data;

class CreateBalanceDTO extends Data
{
    public int $balance;

    public function __construct(
        public float $amount,
        public bool $is_starting,
        public ?int $id = null,
        public ?int $ledger_id = null,
        public ?int $account_id = null,
        public ?int $branch_id = null,
        public string $type = 'debit'
    ) {
        $account = Account::with('accountType')->where('id', $this->account_id)->first();

        $currentBalance = $account ? $account->current_balance : 0;
        $normalBalance = strtolower($account->accountType->normal_balance ?? 'debit');
        $transactionType = strtolower($this->type);

        if ($transactionType === 'debit') {
            if ($normalBalance === 'debit') {
                $this->balance = $currentBalance + $this->amount;
            } else {
                $this->balance = $currentBalance - $this->amount;
            }
        } else { // credit
            if ($normalBalance === 'credit') {
                $this->balance = $currentBalance + $this->amount;
            } else {
                $this->balance = $currentBalance - $this->amount;
            }
        }
    }
}
