#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""Songbook exceptions and errors."""

class SongbookError(Exception):
    """Generic songbook error.

    Songbook errors should inherit from this one.
    """
    pass

class TemplateError(SongbookError):
    """Error during template generation"""

    def __init__(self, original, message=None):
        super(TemplateError, self).__init__()
        self.original = original
        self.message = message

    def __str__(self):
        if self.message is None:
            return str(self.original)
        else:
            return self.message

class LatexCompilationError(SongbookError):
    """Error during LaTeX compilation."""

    def __init__(self, basename):
        super(LatexCompilationError, self).__init__()
        self.basename = basename

    def __str__(self):
        return ("""Error while pdfLaTeX compilation of "{basename}.tex" """
                """(see {basename}.log for more information)."""
                ).format(basename=self.basename)

class StepCommandError(SongbookError):
    """Error during LaTeX compilation."""

    def __init__(self, command, code):
        super(StepCommandError, self).__init__()
        self.command = command
        self.code = code

    def __str__(self):
        return ("""Error while running custom command "{command}": got return"""
                " code {code}.").format(command=self.command, code=self.code)

class CleaningError(SongbookError):
    """Error during cleaning of LaTeX auxiliary files."""

    def __init__(self, filename, exception):
        super(CleaningError, self).__init__()
        self.filename = filename
        self.exception = exception

    def __str__(self):
        return """Error while removing "{filename}": {exception}.""".format(
                filename=self.filename,
                exception=str(self.exception)
                )

class UnknownStep(SongbookError):
    """Unknown compilation step."""

    def __init__(self, step):
        super(UnknownStep, self).__init__()
        self.step = step

    def __str__(self):
        return """Compilation step "{step}" unknown.""".format(step=self.step)