import os

from .vendor_sync import VendorSync, RequestParams
from .constants import Vendor


class BrazeBotSync(VendorSync):
    def __init__(self):
        super().__init__(
            name="braze_bot_sync",
            dry_run=False,
            vendor=Vendor.BRAZE,
            description="Applies bot metadata to Braze users so we can stop sending emails to bots",
            schedule="0 * * * *",
            group_name="email_ops",
            batch_size=100_000,
            rate_limit_delay=3,
            owners=["team:community-pod"],
            metadata={"slack": "#tech-anti-bots"},
            tags={"team": "community-pod", "category": "email-ops", "tech-alerts": "true"},
        )
        self.api_key = os.getenv("BRAZE_API_KEY")
        if not self.api_key:
            raise ValueError("BRAZE_API_KEY environment variable not set")

    def get_vendor_user_id(self, record) -> str:
        return record["USER_UID"]

    def get_request_details(self, record) -> RequestParams:
        return {
            "method": "POST",
            "url": "https://rest.iad-07.braze.com/users/track",
            "headers": {
                "Authorization": f"Bearer {self.api_key}",
                "Content-type": "application/json",
            },
            "json": {
                "attributes": [
                    {
                        "external_id": str(record["USER_UID"]),
                        "_update_existing_only": True,
                        "is_bot": record["IS_BOT"],
                    }
                ]
            },
            "entity_id": str(record["USER_UID"]),
        }


# Create instance
braze_bot_sync = BrazeBotSync()
