from base.base_metrics import BaseMetrics
import boto3
class EBSMetrics(BaseMetrics):
    def __init__(self, access_key, secret_key, region, volume_id):
        super().__init__(access_key, secret_key, region)
        self.volume_id = volume_id

    def get_ebs_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': 'VolumeId', 'Value': self.volume_id}]

        print(f"Consultando métricas para el volumen EBS: {self.volume_id}")
 
        try:
            print(f"Solicitando métrica: {metric}")
            response = cloudwatch_client.get_metric_data(
                MetricDataQueries=[
                    {
                        'Id': metric.lower(),
                        'MetricStat': {
                            'Metric': {
                                'Namespace': 'AWS/EBS',  # Namespace para EBS
                                '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 EBS 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": []
        }
