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

package commonmark4cj.commonmark

public abstract class ListHolder {
    private static let INDENT_DEFAULT: String = "   "
    private static let INDENT_EMPTY: String = ""

    private let parent: ?ListHolder
    private let indent: String

    init(parent: ?ListHolder) {
        this.parent = parent

        if (parent.isSome()) {
            indent = parent().indent + INDENT_DEFAULT
        } else {
            indent = INDENT_EMPTY
        }
    }

    public func getParent(): ?ListHolder {
        return parent
    }

    public func getIndent(): String {
        return indent
    }
}

class BulletListHolder <: ListHolder {
    private let marker: Rune

    public init(parent: ?ListHolder, list: BulletList) {
        super(parent)
        marker = list.getBulletMarker()
    }

    public func getMarker(): Rune {
        return marker
    }
}

class OrderedListHolder <: ListHolder {
    private let delimiter: Rune
    private var counter: Int

    public init(parent: ?ListHolder, list: OrderedList) {
        super(parent)
        delimiter = list.getDelimiter()
        counter = list.getStartNumber()
    }

    public func getDelimiter(): Rune {
        return delimiter
    }

    public func getCounter(): Int {
        return counter
    }

    public func increaseCounter(): Unit {
        counter++
    }
}