import requests
import json
import logging
import time

logger = logging.getLogger(__name__)

class SlackNotifier:
    def __init__(self, webhook_url, enabled=True):
        self.webhook_url = webhook_url
        self.enabled = enabled
        self.retry_attempts = 3
        self.retry_delay = 5  # seconds

    def send_message(self, message):
        if not self.enabled:
            logger.debug("Slack notifications are disabled.")
            return

        payload = {"text": message}

        for attempt in range(self.retry_attempts):
            try:
                response = requests.post(
                    self.webhook_url,
                    data=json.dumps(payload),
                    headers={'Content-Type': 'application/json'}
                )

                if response.status_code == 200:
                    logger.info("Successfully sent message to Slack.")
                    return True
                else:
                    logger.error(f"Failed to send message to Slack. Status code: {response.status_code}, Response: {response.text}")
                    if attempt < self.retry_attempts - 1:
                        logger.warning(f"Retrying in {self.retry_delay} seconds...")
                        time.sleep(self.retry_delay)
                    else:
                        logger.error("Maximum retry attempts reached.  Failing.")
                        return False

            except requests.exceptions.RequestException as e:
                logger.error(f"Error sending message to Slack: {e}")
                if attempt < self.retry_attempts - 1:
                    logger.warning(f"Retrying in {self.retry_delay} seconds...")
                    time.sleep(self.retry_delay)
                else:
                    logger.error("Maximum retry attempts reached.  Failing.")
                    return False

        return False
