from __future__ import annotations

import mypy.errors
from mypy.options import Options


class Errors:
    def __init__(self, options: Options) -> None:
        self.num_errors = 0
        self.num_warnings = 0
        self._errors = mypy.errors.Errors(options, hide_error_codes=True)

    def error(self, msg: str, path: str, line: int) -> None:
        self._errors.set_file(path, None, self._errors.options)
        self._errors.report(line, None, msg, severity="error")
        self.num_errors += 1

    def note(self, msg: str, path: str, line: int) -> None:
        self._errors.set_file(path, None, self._errors.options)
        self._errors.report(line, None, msg, severity="note")

    def warning(self, msg: str, path: str, line: int) -> None:
        self._errors.set_file(path, None, self._errors.options)
        self._errors.report(line, None, msg, severity="warning")
        self.num_warnings += 1

    def new_messages(self) -> list[str]:
        return self._errors.new_messages()

    def flush_errors(self) -> None:
        for error in self.new_messages():
            print(error)
