from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.customaudience import CustomAudience
from facebook_business.api import FacebookAdsApi
from facebook_business.exceptions import FacebookRequestError
class FacebookAdIntegration:
    def __init__(self, access_token:str, app_secret:str, app_id:str, ad_account_id:str):
        self.access_token = access_token
        self.app_secret = app_secret
        self.app_id = app_id
        self.ad_account_id = ad_account_id

        FacebookAdsApi.init(access_token=self.access_token)
        self.account = AdAccount(self.ad_account_id)
    
    def check_permission(self):
        try:
            access = self.account.api_get()
            if access:
                return True, access[AdAccount.Field.account_id] 
            return False
        except FacebookRequestError as e:
            return False, e.api_error_message()

    def create_audience(self, name:str, description:str):
        fields = []
        params = {
            'name': name,
            'subtype': 'CUSTOM',
            'description': description,
            'customer_file_source': 'USER_PROVIDED_ONLY',
        }
        
        created_audience = self.account.create_custom_audience(
            fields=fields,
            params=params,
            )
        
        return created_audience[CustomAudience.Field.id]
    
    def check_audience_exist(self, audience_id:str):
        try:
            
            custom_audiences = self.account.get_custom_audiences(fields=['id', 'name'])
            if custom_audiences:
                audience_ids = []
                for audience in custom_audiences:
                    audience_ids.append({
                        'id': audience[CustomAudience.Field.id],
                        'name': audience[CustomAudience.Field.name]
                    })
                return True, audience_ids
        
        except FacebookRequestError as e:
            return False, str(e.api_error_message())
