import os.path
import sys
import urllib.request

import pytest

from byteb4rb1e.testing.pytest.decorators import run_in_subprocess_once
from byteb4rb1e.testing.pytest.fixtures import mock_system_site_package_dir
from byteb4rb1e.utils.urllib.request import PkgHandler


class TestPkgHandler:
    """
    """
    @run_in_subprocess_once()
    def test_text(self, mock_system_site_package_dir):
        """
        """
        _opener: urllib.request.OpenerDirector =  urllib.request.build_opener(
            PkgHandler()
        )

        dummy_data = 'Hello'

        pkg_dir = mock_system_site_package_dir('foobarpkg')
        (pkg_dir / 'data.txt').write_text(dummy_data)

        result = _opener.open('pkg://foobarpkg/data.txt').readline()

        assert isinstance(result, str)
        assert result == dummy_data


    @run_in_subprocess_once()
    def test_bytes(self, mock_system_site_package_dir):
        """
        """
        _opener: urllib.request.OpenerDirector =  urllib.request.build_opener(
            PkgHandler()
        )

        dummy_data = b'foobar123'

        pkg_dir = mock_system_site_package_dir('foobarpkg')
        (pkg_dir / 'data.bin').write_bytes(dummy_data)

        result = _opener.open('pkg://foobarpkg/data.bin').readline()

        assert isinstance(result, bytes)
        assert result == dummy_data


    @run_in_subprocess_once()
    def test_subdir(self, mock_system_site_package_dir):
        """
        """
        _opener: urllib.request.OpenerDirector =  urllib.request.build_opener(
            PkgHandler()
        )

        dummy_data = 'foobar123'

        pkg_dir = mock_system_site_package_dir('foobarpkg')

        dummy_file = (pkg_dir / 'foo' / 'bar' / 'data.txt')

        dummy_file.parent.mkdir(parents=True)
        dummy_file.write_text(dummy_data)

        result = _opener.open('pkg://foobarpkg/foo/bar/data.txt').readline()

        assert result == dummy_data


    @run_in_subprocess_once()
    def test_nested_module(self, mock_system_site_package_dir):
        """
        """
        _opener: urllib.request.OpenerDirector =  urllib.request.build_opener(
            PkgHandler()
        )

        dummy_data = 'foobar123'

        pkg_dir = mock_system_site_package_dir('foo.bar.pkg')
        dummy_file = (pkg_dir / 'dummy' / 'data.txt')

        dummy_file.parent.mkdir(parents=True)
        dummy_file.write_text(dummy_data)

        result = _opener.open('pkg://foo.bar.pkg/dummy/data.txt').readline()

        assert result == dummy_data
