from connection.connection import Database

class LoadBalancerModel:
    def __init__(self):
        self.db = Database()

    def create_load_balancer_metric(self, load_balancer_arn, request_count, active_connection_count, start_time, end_time):
        query = """
        INSERT INTO load_balancer_metrics (load_balancer_arn, request_count, active_connection_count, start_time, end_time) 
        VALUES (%s, %s, %s, %s, %s) RETURNING id;
        """
        try:
            return self.db.execute(query, (load_balancer_arn, request_count, active_connection_count, start_time, end_time), fetchone=True)
        except Exception as e:
            print(f"Error creating Load Balancer metric: {e}")
            return None

    def get_load_balancer_metric(self, metric_id):
        query = "SELECT id, load_balancer_arn, request_count, active_connection_count, start_time, end_time FROM load_balancer_metrics WHERE id = %s;"
        try:
            return self.db.execute(query, (metric_id,), fetchone=True)
        except Exception as e:
            print(f"Error fetching Load Balancer metric: {e}")
            return None

    def update_load_balancer_metric(self, metric_id, request_count=None, active_connection_count=None):
        query = """
        UPDATE load_balancer_metrics SET 
            request_count = COALESCE(%s, request_count),
            active_connection_count = COALESCE(%s, active_connection_count)
        WHERE id = %s RETURNING id;
        """
        try:
            return self.db.execute(query, (request_count, active_connection_count, metric_id), fetchone=True)
        except Exception as e:
            print(f"Error updating Load Balancer metric: {e}")
            return None

    def delete_load_balancer_metric(self, metric_id):
        query = "DELETE FROM load_balancer_metrics WHERE id = %s RETURNING id;"
        try:
            return self.db.execute(query, (metric_id,), fetchone=True)
        except Exception as e:
            print(f"Error deleting Load Balancer metric: {e}")
            return None