"""Errors for translations."""
import json


class ExitApp(Exception):
    """Exception to indicate app should exit."""

    def __init__(self, reason, exit_code=1):
        """Initialize the exit app exception."""
        self.reason = reason
        self.exit_code = exit_code


class JSONDecodeErrorWithPath(json.JSONDecodeError):
    """Subclass of JSONDecodeError with additional properties.

    Additional properties:
      path: Path to the JSON document being parsed
    """

    def __init__(self, msg, doc, pos, path):
        """Initialize."""
        lineno = doc.count("\n", 0, pos) + 1
        colno = pos - doc.rfind("\n", 0, pos)
        errmsg = f"{msg}: file: {path} line {lineno} column {colno} (char {pos})"
        ValueError.__init__(self, errmsg)
        self.msg = msg
        self.doc = doc
        self.pos = pos
        self.lineno = lineno
        self.colno = colno
        self.path = path

    def __reduce__(self):
        """Reduce."""
        return self.__class__, (self.msg, self.doc, self.pos, self.path)