import requests
import facebook
from django.conf import settings
from .models import FacebookPage

SHORT_LIVED_USER_TOKEN = getattr(settings, 'SHORT_LIVED_USER_TOKEN', None)
APP_ID = getattr(settings, 'APP_ID', None)
APP_SECRET = getattr(settings, 'APP_SECRET', None)


def short2long_lived_user_token(short_lived_user_token, app_id, app_secret):
    access_token_url = f"https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={short_lived_user_token}"

    response = requests.get(access_token_url)

    access_token_info = response.json()
    user_long_token = access_token_info['access_token']
    return user_long_token


def get_pages(user_long_token):
    api = facebook.GraphAPI(access_token=user_long_token, version='3.1')
    res = api.get_object('/me/accounts')
    pages = res.get('data')
    return pages


def insert_pages_into_db(pages):
    for page in pages:
        page_id = page.get('id', None)
        try:
            facebook_page = FacebookPage.objects.get(pk=page_id)
        except FacebookPage.DoesNotExist:
            facebook_page = FacebookPage(id=page_id)
        page_name = page.get('name', None)
        page_access_token = page.get('access_token', None)
        facebook_page.name = page_name
        facebook_page.token = page_access_token
        facebook_page.save()


def store_pages():
    token = short2long_lived_user_token(
        short_lived_user_token=SHORT_LIVED_USER_TOKEN,
        app_id=APP_ID,
        app_secret=APP_SECRET
    )
    pages = get_pages(user_long_token=token)
    insert_pages_into_db(pages=pages)