from base.base_metrics import BaseMetrics
import boto3
class LoadBalancerMetrics(BaseMetrics):
    def __init__(self, access_key, secret_key, region, load_balancer_arn):
        super().__init__(access_key, secret_key, region)
        self.load_balancer_arn = load_balancer_arn

    def get_metric_data(self,metric, start_time, end_time,time,stat):
        session = boto3.Session(
        aws_access_key_id=self.access_key, 
        aws_secret_access_key= self.secret_key,  
        region_name=self.region
        )
        cloudwatch_client = session.client('cloudwatch')
        dimensions = [{'Name': 'LoadBalancer', 'Value': self.load_balancer_arn}]

        try:
            print(f"Solicitando métrica: {metric}")
            response = cloudwatch_client.get_metric_data(
                MetricDataQueries=[
                    {
                        'Id': metric.lower(),
                        'MetricStat': {
                            'Metric': {
                                'Namespace': 'AWS/ApplicationELB',  # Namespace para Application Load Balancer
                                'MetricName': metric,
                                'Dimensions': dimensions
                            },
                            'Period': time,  # Datos por hora
                            'Stat': stat
                        },
                        'ReturnData': True
                    }
                ],
                StartTime=start_time,
                EndTime=end_time
            )

            timestamps = response['MetricDataResults'][0]['Timestamps']
            values = response['MetricDataResults'][0]['Values']
            if not timestamps or not values:
                return {
                    "status": "success",
                    "message": f"No se encontraron datos para la métrica {metric}",
                    "timestamps": [],
                    "values": []
                }
            return {
                "status": "success",
                "message": f"Métricas Load Balancer para {metric}",
                "timestamps": timestamps,
                "values": values
            }
        except Exception as e:
            return {
                "status": "error",
                "message": f"Error al obtener datos para la métrica {metric}: {str(e)}",
                "timestamps": [],
                "values": []
            }