import vcr
from django.conf import settings
from django.contrib.auth import (
    BACKEND_SESSION_KEY,
    HASH_SESSION_KEY,
    SESSION_KEY,
    get_user_model,
)
from django.contrib.sessions.backends.db import SessionStore
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium import webdriver

vcr_options = {
    "path": "gamecard/fixtures/test.yaml",
    "ignore_localhost": True,
    "filter_headers": ["authorization"],
    "filter_query_parameters": ["email", "password"],
    # 'record_mode':"new_episodes",
    "decode_compressed_response": True,
    "allow_playback_repeats": True,
}


def create_session_cookie():

    # First, create a new test user
    user = get_user_model()
    # user.objects.create_user(username=username, password=password)
    user = get_user_model().objects.get(pk=2)

    # Then create the authenticated session using the new user credentials
    session = SessionStore()
    session[SESSION_KEY] = user.pk
    session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0]
    session[HASH_SESSION_KEY] = user.get_session_auth_hash()
    session.save()

    # Finally, create the cookie dictionary
    cookie = {
        "name": settings.SESSION_COOKIE_NAME,
        "value": session.session_key,
        "secure": False,
        "path": "/",
    }
    return cookie


class GamecardTests(StaticLiveServerTestCase):
    fixtures = ["benchcoach/fixtures/dump.json"]

    @classmethod
    def setUpClass(cls):
        cls.port = 8000
        super().setUpClass()
        cls.selenium = webdriver.Chrome("/opt/homebrew/bin/chromedriver")
        cls.selenium.implicitly_wait(10)

    @classmethod
    def tearDownClass(cls):
        cls.selenium.quit()
        super().tearDownClass()

    def setUp(self):
        session_cookie = create_session_cookie()
        self.selenium.get("{}{}".format(self.live_server_url, "/"))
        self.selenium.add_cookie(session_cookie)
        self.selenium.refresh()
        pass

    @vcr.use_cassette(**vcr_options)
    def test_gamecard(self):
        self.selenium.get(
            "{url}/{team_id}/event/{event_id}/gamecard/".format(
                url=self.live_server_url, team_id=6882652, event_id=266446202
            )
        )
        breakpoint()
