#!/usr/bin/env python3
#
# Copyright 2024 - The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the',  help="License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an',  help="AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import logging


class Task:
  """General Task class for modularizing tasks in Building netsim"""

  def __init__(self, name: str, enabled=False):
    self.enabled = enabled
    self.name = name

  def enable(self, enable: bool):
    self.enabled = enable

  def run(self):
    """Runs the task if it's enabled."""
    if self.enabled:
      logging.info("Running %s", self.name)
      if self.do_run():
        logging.info("%s completed!", self.name)
      else:
        logging.info("%s incomplete", self.name)
    else:
      logging.info("Skipping %s", self.name)

  def do_run(self) -> bool:
    """Subclasses should implement the concrete task.

    Returns True if the run is successful
    """
    return True
