import ntpath
from typing import TYPE_CHECKING

from ..streams import EndianBinaryReader

if TYPE_CHECKING:
    from ..files.SerializedFile import SerializedFile


def get_resource_data(res_path: str, assets_file: "SerializedFile", offset: int, size: int):
    basename = ntpath.basename(res_path)
    name, ext = ntpath.splitext(basename)
    possible_names = [
        basename,
        f"{name}.resource",
        f"{name}.assets.resS",
        f"{name}.resS",
    ]
    environment = assets_file.environment
    reader = None
    for possible_name in possible_names:
        reader = environment.get_cab(possible_name)
        if reader:
            break
    if not reader:
        assets_file.load_dependencies(possible_names)
        for possible_name in possible_names:
            reader = environment.get_cab(possible_name)
            if reader:
                break
        if not reader:
            raise FileNotFoundError(f"Resource file {basename} not found")
    return _get_resource_data(reader, offset, size)


def _get_resource_data(reader: EndianBinaryReader, offset: int, size: int):
    reader.Position = offset
    return reader.read_bytes(size)
