import { reactive } from 'vue'

/**
 * 复合条件要素
 */
export class CheckConditionElements {
    private readonly parames: Map<string, string> = new Map()

    /**
     * 账号
     */
    set Account(value: string) {
        this.AddElement("Txcode", value)
    }

    /**
     * 交易金额
     */
    set Money(value: number) {
        this.AddElement("SinAmt", value.toString())
    }

    /**
     * 法人类型
     */
    set LegalPerson(value: string) {
        this.AddElement("LegalPerson", value)
    }

    /**
     * 交易代码 前端的交易码
     */
    set Txcode(value: string) {
        this.AddElement("Txcode", value)
    }

    /**
     * 转账/现金标志
     * 值：1：转账；2：现金
     */
    set CTSigns(value: string) {
        this.AddElement("CTSigns", value)
    }

    /**
     * 借方账户类型（对公、对私、内部）
     * 值：1：对公；2：对私；3：内部
     */
    set DeAccountType(value: string) {
        this.AddElement("DeAccountType", value)
    }

    /**
     * 贷方账户类型（对公、对私、内部）
     * 值：1：对公；2：对私；3：内部
     */
    set CrAccountType(value: string) {
        this.AddElement("CrAccountType", value)
    }

    /**
     * 借方账户属性（基本户、一般户、专用户、临时户）
     * 值：1：基本户；2：一般户；3：专用户；4：临时户
     */
    set DeAccountPro(value: string) {
        this.AddElement("DeAccountPro", value)
    }

    /**
     * 贷方账户属性（基本户、一般户、专用户、临时户）
     * 值：1：基本户；2：一般户；3：专用户；4：临时户
     */
    set CrAccountPro(value: string) {
        this.AddElement("CrAccountPro", value)
    }

    /**
     * 借方是否是本行账号
     * 值：true：是；false：否
     */
    set DeIsOwn(value: string) {
        this.AddElement("DeIsOwn", value)
    }

    /**
     * 贷方是否是本行账号
     * 值：true：是；false：否
     */
    set CrIsOwn(value: string) {
        this.AddElement("CrIsOwn", value)
    }

    /**
     * 借记方和贷记方是否是同一客户
     * 值：true：是；false：否
     */
    set DCIsSameCus(value: string) {
        this.AddElement("DCIsSameCus", value)
    }

    /**
     * 单笔金额
     */
    set SinAmt(value: string) {
        this.AddElement("SinAmt", value)
    }

    /**
     * 当日借方累计金额
     */
    set SumAddAmt(value: string) {
        this.AddElement("SumAddAmt", value)
    }

    /**
     * 当日借方现金累计金额
     */
    set DeCaAddAmt(value: string) {
        this.AddElement("DeCaAddAmt", value)
    }

    /**
     * 当日贷方现金累计金额
     */
    set CrTrAddAmt(value: string) {
        this.AddElement("CrTrAddAmt", value)
    }

    /**
     * 当日借方转账累计金额
     */
    set DeTrAddAmt(value: string) {
        this.AddElement("DeTrAddAmt", value)
    }

    /**
     * 挂失标志
     * 值：true：是；false：否
     */
    set LossMarked(value: string) {
        this.AddElement("LossMarked", value)
    }

    /**
     * 凭证种类
     */
    set DocumentType(value: string) {
        this.AddElement("DocumentType", value)
    }

    /**
     * 扣划标志
     */
    set DeductMarked(value: string) {
        this.AddElement("DeductMarked", value)
    }

    /**
     * 长短款标志
     * 值：true：是；false：否
     */
    set LongOrShort(value: string) {
        this.AddElement("LongOrShort", value)
    }

    /**
     * 止付类型
     */
    set UnPayType(value: string) {
        this.AddElement("UnPayType", value)
    }

    /**
     * 是否调整积数
     * 值：true：是；false：否
     */
    set IsChangeBase(value: string) {
        this.AddElement("IsChangeBase", value)
    }

    /**
     * 账户状态，一般"1"表示挂失未到期
     */
    set AccountState(value: string) {
        this.AddElement("AccountState", value)
    }

    /**
     * 操作类型
     */
    set OperationType(value: string) {
        this.AddElement("OperationType", value)
    }

    /**
     * 设置其他未命名要素
     */
    public AddElement(tag: string, value: string): void {
        this.parames.set(tag, value)
    }

    /**
     * 获得所有要素集合
     */
    get JsonValue(): string {
        return this.SerialazeJson()
    }

    private SerialazeJson(): string {
        return JSON.stringify(Object.fromEntries(this.parames))
    }
}

// Vue组合式API封装
export const useCheckConditionElements = () => {
    return reactive(new CheckConditionElements())
}