#!/usr/bin/env python3

import threading
import Scheduler
import ThreadPool

from PackageBuilder import PackageBuilder


class WorkerThread(threading.Thread):
    def __init__(self, event, name, mapPackageToCycle, logger, pkgBuildType):
        threading.Thread.__init__(self)
        self.statusEvent = event
        self.name = name
        self.mapPackageToCycle = mapPackageToCycle
        self.logger = logger
        self.pkgBuildType = pkgBuildType

    def run(self):
        ThreadPool.ThreadPool.makeWorkerThreadActive(self.name)
        self.logger.debug(f"Thread {self.name} is starting now")
        while True:
            pkg = Scheduler.Scheduler.getNextPackageToBuild()
            if pkg is None:
                break
            doneList = Scheduler.Scheduler.getDoneList()
            pkgBuilder = PackageBuilder(
                self.mapPackageToCycle, self.pkgBuildType
            )
            try:
                pkgBuilder.build(pkg, doneList)
            except Exception as e:
                self.logger.exception(e)
                Scheduler.Scheduler.notifyPackageBuildFailed(pkg)
                self.logger.debug(
                    f"Thread {self.name} stopped building package: {pkg}"
                )
                self.statusEvent.set()
                break
            Scheduler.Scheduler.notifyPackageBuildCompleted(pkg)

        ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name)
        self.logger.debug(f"Thread {self.name} is going to rest")