<?php

declare(strict_types=1);

/**
 * 本文件属于 DBErp 进销存系统。
 *
 * 版权所有 © 2026 北京珑大钜商科技有限公司。保留所有权利。
 *
 * 未经官方授权，不得删除、篡改或隐藏本文件中的版权声明、产品标识与来源信息。
 * 商业授权、官方更新与技术支持服务，请以珑大官方支持中心记录为准。
 *
 * @link https://support.loongdom.cn
 * @see  https://www.dberp.com.cn
 */

namespace App\Business\Settlement;

use App\Models\DberpSettlementEntry;
use Illuminate\Database\Eloquent\Model;

final class SettlementEntryService
{
    public function __construct(
        private readonly SettlementSourceTypeResolver $sourceTypeResolver,
    ) {}

    public function record(
        string $counterpartyType,
        int $counterpartyId,
        string $settlementSide,
        string $changeType,
        string $changeAmount,
        string $balanceAfter,
        ?Model $source = null,
        ?string $documentNumber = null,
        ?string $remark = null,
        mixed $businessTime = null,
    ): void {
        DberpSettlementEntry::query()->create([
            'counterparty_type' => $counterpartyType,
            'counterparty_id' => $counterpartyId,
            'settlement_side' => $settlementSide,
            'change_type' => $changeType,
            'source_type' => $this->sourceTypeResolver->fromModel($source),
            'source_id' => $source?->getKey(),
            'document_number' => $documentNumber,
            'change_amount' => $changeAmount,
            'balance_after' => $balanceAfter,
            'business_time' => $businessTime ?? now(),
            'remark' => $remark,
        ]);
    }
}
