# Sharing fixtures
# Ref: https://docs.pytest.org/en/6.2.x/fixture.html#scope-sharing-fixtures-across-classes-modules-packages-or-session

import pytest
from helper import TempRepository


def create_repo(dirname=None):
    repo = TempRepository(dirname)
    repo.create_tmp_file()  # tmp_file_a
    repo.create_tmp_file()  # tmp_file_b
    repo.switch_cwd_under_repo()
    return repo


def init_repo_git_status(repo):
    git = repo.get_repo_git()
    git.add(".")
    git.config("--local", "user.name", "test")
    git.config("--local", "user.email", "test@git-extras.com")
    git.commit("-m", "chore: initial commit")


@pytest.fixture(scope="module")
def temp_repo():
    repo = create_repo()
    init_repo_git_status(repo)
    return repo


@pytest.fixture(scope="module")
def named_temp_repo(request):
    dirname = request.param
    repo = create_repo(dirname)
    init_repo_git_status(repo)
    yield repo
    repo.teardown()


@pytest.fixture(scope="function")
def temp_repo_clean():
    """Create a temporary repository that is reset for each function call."""
    repo = create_repo()
    init_repo_git_status(repo)
    return repo
