from typing import Set

import pytest
import requests

from nicegui import __version__, ui
from nicegui.testing import Screen


@pytest.fixture(autouse=True)
def activate_fastapi_docs(screen: Screen):
    screen.ui_run_kwargs['fastapi_docs'] = True


def get_openapi_paths() -> Set[str]:
    return set(requests.get(f'http://localhost:{Screen.PORT}/openapi.json', timeout=5).json()['paths'])


def test_endpoint_documentation_default(screen: Screen):
    screen.open('/')
    assert get_openapi_paths() == set()


def test_endpoint_documentation_page_only(screen: Screen):
    screen.ui_run_kwargs['endpoint_documentation'] = 'page'
    screen.open('/')
    assert get_openapi_paths() == {'/'}


def test_endpoint_documentation_internal_only(screen: Screen):
    screen.ui_run_kwargs['endpoint_documentation'] = 'internal'
    ui.markdown('Hey!')

    screen.open('/')
    assert get_openapi_paths() == {
        f'/_nicegui/{__version__}/codehilite.css',
        f'/_nicegui/{__version__}/libraries/{{key}}',
        f'/_nicegui/{__version__}/components/{{key}}',
        f'/_nicegui/{__version__}/resources/{{key}}/{{path}}',
    }


def test_endpoint_documentation_all(screen: Screen):
    screen.ui_run_kwargs['endpoint_documentation'] = 'all'
    ui.markdown('Hey!')

    screen.open('/')
    assert get_openapi_paths() == {
        '/',
        f'/_nicegui/{__version__}/codehilite.css',
        f'/_nicegui/{__version__}/libraries/{{key}}',
        f'/_nicegui/{__version__}/components/{{key}}',
        f'/_nicegui/{__version__}/resources/{{key}}/{{path}}',
    }