import requests

from django.conf import settings
from django.shortcuts import render
from django.urls import reverse
from django_http_exceptions import HTTPExceptions

# Create your views here.


def index(request):
    redirect_uri = request.build_absolute_uri(reverse("instagram_token:exchange"))

    authorization_url = (
        "https://api.instagram.com/oauth/authorize"
        f"?client_id={settings.INSTAGRAM_CLIENT_ID}"
        f"&redirect_uri={redirect_uri}"
        "&scope=user_profile,user_media"
        "&response_type=code"
    )

    return render(
        request,
        "instagram_token/index.html",
        {
            "authorization_url": authorization_url
        }
    )


def exchange(request):
    code = request.GET.get("code")

    if code is None:
        return reverse("instagram_token:index")

    exchange_request = requests.post(
        "https://api.instagram.com/oauth/access_token",
        data={
            "client_id": settings.INSTAGRAM_CLIENT_ID,
            "client_secret": settings.INSTAGRAM_CLIENT_SECRET,
            "code": code,
            "grant_type": "authorization_code",
            "redirect_uri": request.build_absolute_uri(reverse("instagram_token:exchange")),
        }
    )

    if not exchange_request.ok:
        raise HTTPExceptions.BAD_REQUEST

    exchange_request = exchange_request.json()

    return render(
        request,
        "instagram_token/exchange.html",
        {
            "access_token": exchange_request["access_token"],
            "user_id": exchange_request["user_id"],
        }
    )