import os

from django.conf import settings
from django.test import tag
from selenium import webdriver
from selenium.webdriver.common.by import By

from .base import FunctionalTest
from .post_page import PostPage
from .my_posts_page import MyPostsPage


# Helper fns
def quit_if_possible(browser):
    try:
        browser.quit()
    except:
        pass


# Test mdls
class SharingTest(FunctionalTest):
    @tag("two-browser")
    def test_can_share_a_post_with_another_user(self):
        self.create_pre_authenticated_session("disco@test.io")
        disco_browser = self.browser
        self.addCleanup(lambda: quit_if_possible(disco_browser))

        options = webdriver.FirefoxOptions()
        if os.environ.get("HEADLESS"):
            options.add_argument("--headless")
        ali_browser = webdriver.Firefox(options=options)
        self.addCleanup(lambda: quit_if_possible(ali_browser))
        self.browser = ali_browser
        self.create_pre_authenticated_session("alice@test.io")

        self.browser = disco_browser
        self.browser.get(self.live_server_url + '/billboard/')
        post_page = PostPage(self).add_post_line("Send help")

        share_box = post_page.get_share_box()
        self.assertEqual(
            share_box.get_attribute("placeholder"),
            "friend@example.com or username",
        )

        post_page.share_post_with("alice@test.io")

        self.browser = ali_browser
        MyPostsPage(self).go_to_my_posts_page("alice@test.io")

        self.browser.find_element(By.LINK_TEXT, "Send help").click()

        self.wait_for(
            lambda: self.assertEqual(post_page.get_post_owner(), "disco@test.io")
        )

        post_page.add_post_line("At your command, Disco King")

        self.browser = disco_browser
        self.browser.refresh()
        # Line numbering: 1) "Send help" 2) "Shared with alice@test.io …"
        # (auto-appended by share_post in C3.b) 3) Alice's reply.
        post_page.wait_for_row_in_post_table("At your command, Disco King", 3)

class PostAccessTest(FunctionalTest):
    def test_stranger_cannot_access_owned_post(self):
        self.create_pre_authenticated_session("disco@test.io")
        self.browser.get(self.live_server_url + '/billboard/')
        PostPage(self).add_post_line("private eye")
        post_url = self.browser.current_url

        self.browser.delete_cookie(settings.SESSION_COOKIE_NAME)
        self.browser.get(post_url)

        self.assertNotEqual(self.browser.current_url, post_url)
