from .base import BasePage
from .global_selection import GlobalSelectionPage
from .issue_details import IssueDetailsPage


class IssueListPage(BasePage):
    def __init__(self, browser, client):
        super().__init__(browser)
        self.client = client
        self.global_selection = GlobalSelectionPage(browser)

    def visit_issue_list(self, org, query=""):
        self.browser.get(f"/organizations/{org}/issues/{query}")
        self.wait_until_loaded()

    def wait_for_stream(self):
        self.browser.wait_until('[data-test-id="event-issue-header"]', timeout=20)

    def select_issue(self, position):
        self.browser.click(f'[data-test-id="group"]:nth-child({position})')

    def navigate_to_issue(self, position):
        self.browser.click(f'[data-test-id="group"]:nth-child({position}) a')
        self.browser.wait_until(".group-detail")
        self.issue_details = IssueDetailsPage(self.browser, self.client)

    def resolve_issues(self):
        self.browser.click('[aria-label="Resolve"]')

    def wait_for_issue_removal(self):
        self.browser.click_when_visible('[data-test-id="toast-success"]')
        self.browser.wait_until_not('[data-test-id="toast-success"]')

    def wait_for_issue(self):
        self.browser.wait_until('[data-test-id="group"]')

    def find_resolved_issues(self):
        return self.browser.elements('[data-test-id="resolved-issue"]')

    def archive_issues(self):
        self.browser.click('[aria-label="Archive"]')

    def delete_issues(self):
        self.browser.click('[aria-label="More issue actions"]')
        self.browser.wait_until('[data-test-id="delete"]')
        self.browser.click('[data-test-id="delete"]')
        self.browser.click('[data-test-id="confirm-button"]')

    def merge_issues(self):
        # Merge button gets put into an overflow menu for small viewports
        if self.browser.element_exists('[aria-label="Merge Selected Issues"]'):
            self.browser.click('[aria-label="Merge Selected Issues"]')
            self.browser.click('[data-test-id="confirm-button"]')
        else:
            self.browser.click('[aria-label="More issue actions"]')
            self.browser.wait_until('[data-test-id="merge"]')
            self.browser.click('[data-test-id="merge"]')
            self.browser.click('[data-test-id="confirm-button"]')

    def mark_reviewed_issues(self):
        # Marked reviewed button gets put into an overflow menu for small viewports
        if self.browser.element_exists('[aria-label="Mark Reviewed"]'):
            self.browser.click('[aria-label="Mark Reviewed"]')
        else:
            self.browser.click('[aria-label="More issue actions"]')
            self.browser.wait_until('[data-test-id="mark-reviewed"]')
            self.browser.click('[data-test-id="mark-reviewed"]')