from .base_agent import BaseAgent
from ..aws_connector import AWSConnector

class SecretsManagerAgent(BaseAgent):
    """
    An agent specialized in handling AWS Secrets Manager tasks.
    """

    def execute(self, command: str, **kwargs):
        """
        Executes a given command related to Secrets Manager.
        """
        if command == 'list_secrets':
            return self._list_secrets(**kwargs)
        elif command == 'get_secret_value':
            return self._get_secret_value(**kwargs)
        else:
            raise NotImplementedError(f"Command '{command}' is not supported by SecretsManagerAgent.")

    def _list_secrets(self, region: str):
        """Lists all secrets in a specified region."""
        print(f"SecretsManagerAgent: Listing secrets in region {region}...")
        try:
            sm_client = AWSConnector.get_client('secretsmanager', region_name=region)
            response = sm_client.list_secrets()
            secret_arns = [secret['ARN'] for secret in response['SecretList']]
            return {"status": "success", "secrets": secret_arns}
        except Exception as e:
            print(f"Error listing secrets: {e}")
            return {"status": "error", "message": str(e)}

    def _get_secret_value(self, region: str, secret_id: str):
        """
        Retrieves metadata for a secret. 
        For security reasons, this function does not return the actual secret string or binary.
        """
        print(f"SecretsManagerAgent: Getting metadata for secret '{secret_id}' in region {region}...")
        try:
            sm_client = AWSConnector.get_client('secretsmanager', region_name=region)
            response = sm_client.get_secret_value(SecretId=secret_id)
            # Do not expose the secret value itself. Return metadata instead.
            return {
                "status": "success",
                "message": f"Successfully retrieved metadata for secret '{secret_id}'.",
                "secret_arn": response.get('ARN'),
                "version_id": response.get('VersionId'),
                "created_date": response.get('CreatedDate').isoformat() if response.get('CreatedDate') else None
            }
        except Exception as e:
            print(f"Error getting secret value: {e}")
            return {"status": "error", "message": str(e)}
