STEP_COUNTS = {
    "import_reference": 0,
    "setup_remote_reference": 0,
    "update_remote_reference": 0,
    "update_software": 0,
    "install_hmms": 0
}

FIRST_STEPS = {
    "import_reference": "load_file",
    "setup_remote_reference": "",
    "update_remote_reference": "",
    "update_software": "",
    "install_hmms": ""
}

UNIQUES = [
    "update_software",
    "install_hmms"
]

STEP_COUNTS = {
    "import_reference": 0,
    "setup_remote_reference": 0,
    "update_remote_reference": 0,
    "update_software": 0,
    "install_hmms": 0
}

FIRST_STEPS = {
    "import_reference": "load_file",
    "setup_remote_reference": "",
    "update_remote_reference": "",
    "update_software": "",
    "install_hmms": ""
}

UNIQUES = [
    "update_software",
    "install_hmms"
]


class ProgressTracker:

    def __init__(self, total, db=None, increment=0.05, factor=1):
        self.total = total
        self.db = db
        self.increment = increment
        self.factor = factor

        self.count = 0
        self.last_reported = 0

    def add(self, value):
        count = self.count + value

        if count > self.total:
            raise ValueError("Count cannot exceed total")

        self.count = count

        return self.progress

    async def reported(self):
        self.last_reported = self.progress

    @property
    def progress(self):
        return round(self.count / self.total, 2)

Add ProgressTracker class for tracking progress in long operations
Add ProgressTracker class for tracking progress in long operations

