/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
 */

package xsequence4cj

/**
 * 序列号区间对象模型
 */
public class SeqRange {

    /**
     * 区间的序列号开始值
     */
    private var min: Int64
    /**
     * 区间的序列号结束值
     */
    private var max: Int64
    /**
     * 区间的序列号当前值
     */
    private var value: AtomicInt64
    /**
     * 区间的序列号是否分配完毕,每次分配完毕就会去重新获取一个新的区间
     */
    private var over: Bool = false

    public init(min: Int64, max: Int64) {
        this.min = min
        this.max = max
        this.value = AtomicInt64(min)
    }

    /**
     * 返回并递增下一个序列号
     *
     * @return 下一个序列号,如果返回-1表示序列号分配完毕
     */
    public func getAndIncrement(): Int64 {
        let currentValue: Int64 = value.fetchAdd(1)
        if (currentValue > max) {
            over = true
            return -1
        }

        return currentValue
    }

    public func getMin(): Int64 {
        return min
    }

    public func getMax(): Int64 {
        return max
    }

    public func isOver(): Bool {
        return over
    }

    public func setOver(over: Bool): Unit {
        this.over = over
    }

    public func toString(): String {
        return "max: ${max}, min: ${min}, value: ${value.load()}"
    }
}