import enum

from mlip_arena.models import MLIP
from mlip_arena.tasks import Task


class Machine(enum.Enum):
    """Enum class for machine"""
    HFCPU = "Hugging Face CPU Basic"
    PERLCPU = "NERSC Perlmutter CPU"
    PERLA100 = "NERSC Perlmutter A100 40GB"
    PERLA100L = "NERSC Perlmutter A100 80GB"

class Job:
    def __init__(self, model: MLIP, task: Task, machine: Machine, **kwargs):
        self.calculator = model
        self.task = task
        self.machine = machine
        self.kwargs = kwargs

    def __str__(self):
        return f"Job: {self.task.name} on {self.machine.value}"
    
    def run(self):
        if self.machine == Machine.HFCPU:
            print(f"Running {self.name} on {self.machine.value}")
            "run the task on Hugging Face CPU Basic"
            raise NotImplementedError
        elif self.machine == Machine.PERLCPU:
            print(f"Running {self.name} on {self.machine.value}")
            "send the task to NERSC Perlmutter CPU node and listen for the results"
            raise NotImplementedError
        elif self.machine == Machine.PERLA100:
            print(f"Running {self.name} on {self.machine.value}")
            "send the task to NERSC Perlmutter GPU node and listen for the results"
            raise NotImplementedError