# edited by glg
from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class PenjualanErrorCode:
    code: str
    message: str


class PenjualanError(Exception):
    def __init__(self, code: str, message: str, *, cause: Exception | None = None):
        self.code = str(code or "PENJUALAN_UNKNOWN").strip() or "PENJUALAN_UNKNOWN"
        self.message = str(message or "").strip() or "Terjadi kesalahan pada modul penjualan."
        self.cause = cause
        super().__init__(f"[{self.code}] {self.message}")


class TransaksiSaveError(PenjualanError):
    pass


class SettlementProcessError(PenjualanError):
    pass


class ReturnProcessError(PenjualanError):
    pass


class PembatalanProcessError(PenjualanError):
    pass

