# metrics_collector/base/base_metrics.py
import boto3
from botocore.exceptions import NoCredentialsError, PartialCredentialsError

class BaseMetrics:
    def __init__(self, access_key, secret_key, region):
        self.access_key = access_key
        self.secret_key = secret_key
        self.region = region
        self.client = self.create_client()

    def create_client(self):
        try:
            client = boto3.client(
                'cloudwatch',
                aws_access_key_id=self.access_key,
                aws_secret_access_key=self.secret_key,
                region_name=self.region
            )
            return client
        except (NoCredentialsError, PartialCredentialsError) as e:
            print(f"Error: {e}")
            return None

    def get_metric_data(self, metric_name, namespace, dimensions, start_time, end_time, period, statistics):
        if not self.client:
            print("No client available.")
            return None
        
        try:
            response = self.client.get_metric_data(
                MetricDataQueries=[
                    {
                        'Id': 'm1',
                        'MetricStat': {
                            'Metric': {
                                'Namespace': namespace,
                                'MetricName': metric_name,
                                'Dimensions': dimensions
                            },
                            'Period': period,
                            'Stat': statistics
                        },
                        'ReturnData': True
                    }
                ],
                StartTime=start_time,
                EndTime=end_time
            )
            return response
        except Exception as e:
            print(f"Error: {e}")
            return None
