import datetime
import requests

class Trigger:
    def __init__(self, trigger_tags, comparison_tags, time_definition, event_name, included=True):
        self.trigger_tags = set(trigger_tags)
        self.comparison_tags = set(comparison_tags)
        self.time_definition = time_definition
        self.event_name = event_name
        self.included = included
        self.threshold = 0
        self.actions = []
        self.sources = []

    def add_action(self, action):
        self.actions.append(action)

    def remove_action(self, action):
        if action in self.actions:
            self.actions.remove(action)
        else:
            print("Action not found")

    def add_source(self, source):
        self.sources.append(source)

    def remove_source(self, source):
        if source in self.sources:
            self.sources.remove(source)
        else:
            print("Source not found")

    def check_trigger(self, current_tags, current_time):
        if self.included:
            if current_time in self.time_definition and self.trigger_tags.issubset(current_tags):
                self.threshold += 1
            else:
                self.threshold = 0
        else:
            if current_time in self.time_definition and not self.trigger_tags.intersection(current_tags):
                self.threshold += 1
            else:
                self.threshold = 0

        if self.threshold >= len(self.time_definition):
            self.fire_actions()
            self.make_requests()

    def fire_actions(self):
        for action in self.actions:
            action(self.event_name)

    def make_requests(self):
        for source in self.sources:
            try:
                response = requests.get(source)
                # Procesar la respuesta aquí si es necesario
                print(f"Request made to {source}. Status code: {response.status_code}")
            except requests.exceptions.RequestException as e:
                print(f"Error making request to {source}: {e}")

# Ejemplo de uso:

def action_function(event_name):
    print(f"Trigger fired for event: {event_name}")


if __name__ == "__main__":

    # Definición de un trigger
    trigger = Trigger(["tag1", "tag2"], ["tag3", "tag4"], [datetime.time(10, 0), datetime.time(15, 0)], "Event1")

    # Añadir una acción al trigger
    trigger.add_action(action_function)

    # Añadir una fuente al trigger
    trigger.add_source("https://example.com/api/data")

    # Simular la comprobación periódica del trigger (aquí se usaría en un bucle de tiempo real)
    current_tags = {"tag1", "tag2", "tag3"}
    current_time = datetime.datetime.now().time()
    trigger.check_trigger(current_tags, current_time)