import os
from pathlib import Path


class FatalProspectorException(Exception):

    """
    Exception used to indicate an internal prospector problem.
    Problems in prospector itself should raise this to notify
    the user directly. Errors in dependent tools should be
    caught and the user notified elegantly.

    """

    # (see also the --die-on-tool-error flag)

    def __init__(self, message: str):
        super().__init__(message)
        self.message = message


class CouldNotHandleEncoding(Exception):
    def __init__(self, path: Path):
        super().__init__()
        self.path = path


class PermissionMissing(Exception):
    def __init__(self, path: Path):
        docs_url = "https://prospector.landscape.io/en/master/profiles.html#ignoring-paths-and-patterns"
        if os.path.isdir(path):
            what = f"directory {path}"
        else:
            what = f"the file {path}"
        error_msg = (
            f"The current user {os.getlogin()} does not have permission to open "
            f"{what}. Either fix permissions or tell prospector to skip it "
            f"by adding this path to `--ignore-paths` on the commandline "
            f"or in `ignore-paths` in the prospector profile (see {docs_url})"
        )
        super().__init__(error_msg)
