/** خطاهای استاندارد دامنه با پیام فارسی و کد HTTP مشخص */
export class AppError extends Error {
  constructor(
    public readonly statusCode: number,
    public readonly code: string,
    message: string,
    public readonly details?: unknown,
  ) {
    super(message);
  }
}

export const Errors = {
  unauthorized: (m = 'برای انجام این عملیات باید وارد شوید.') => new AppError(401, 'UNAUTHORIZED', m),
  forbidden: (m = 'شما مجوز انجام این عملیات را ندارید.') => new AppError(403, 'FORBIDDEN', m),
  notFound: (m = 'مورد درخواستی یافت نشد.') => new AppError(404, 'NOT_FOUND', m),
  conflict: (m = 'تعارض در وضعیت داده.') => new AppError(409, 'CONFLICT', m),
  validation: (m = 'داده ارسالی معتبر نیست.', d?: unknown) => new AppError(422, 'VALIDATION_ERROR', m, d),
  locked: (m = 'این محتوا قفل شده است و ویرایش عادی آن مجاز نیست.') => new AppError(423, 'CONTENT_LOCKED', m),
  tooMany: (m = 'تعداد درخواست‌ها بیش از حد مجاز است.') => new AppError(429, 'RATE_LIMITED', m),
  internal: (m = 'خطای داخلی سرور.') => new AppError(500, 'INTERNAL_ERROR', m),
};
