import os
from typing import Dict

from _pytest.fixtures import FixtureRequest
from typing_extensions import override

from approvaltests.namer.namer_base import NamerBase


class PyTestNamer(NamerBase):
    "Pass a pytest 'request' to the constructor. You get one of those as a pytest fixture"

    def __init__(self, request: FixtureRequest, extension: None = None) -> None:
        NamerBase.__init__(self, extension)
        self.request = request
        self.filepath, self.filename = os.path.split(str(self.request.fspath))
        self.config: Dict[str, str] = {}
        subdir = self.request.config.getoption(
            "approvaltests_subdirectory", default=None
        )
        if subdir:
            self.config["subdirectory"] = subdir

    @override
    def get_file_name(self) -> str:
        return f"{os.path.splitext(self.filename)[0]}.{self.request.node.name}"

    @override
    def get_directory(self) -> str:
        return self.filepath

    @override
    def get_config(self) -> Dict[str, str]:
        return self.config
