/*
    Copyright (C) 2020 Max von Buelow <max@m9x.de>
*/

#ifndef ERROR_H_INCLUDED
#define ERROR_H_INCLUDED
#include "export.h"  /* EXPORT_DECL EXPORT_DEF */
#include "mutils.h"

enum error {
	E_UNKNOWN = 0,
	E_DEVICE_DISABLED,
	E_DEVICE_NOT_FOUND,
	E_DEVICE_DISCONNECTED,
	E_INVALID_USSD,
	E_INVALID_PHONE_NUMBER,
	E_PARSE_UTF8,
	E_PARSE_UCS2,
	E_ENCODE_GSM7,
	E_PACK_GSM7,
	E_DECODE_GSM7, /* 10 */
	E_SMSDB,
	E_QUEUE,
	E_BUILD_PDU,
	E_PARSE_CMGR_LINE,
	E_DEPRECATED_CMGR_TEXT,
	E_INVALID_TPDU_LENGTH,
	E_MALFORMED_HEXSTR,
	E_INVALID_SCA,
	E_INVALID_TPDU_TYPE,
	E_PARSE_TPDU, /* 20 */
	E_INVALID_TIMESTAMP,
	E_INVALID_CHARSET,
	E_BUILD_SCA,
	E_BUILD_PHONE_NUMBER,
	E_2BIG
};

INLINE_DECL const char *error2str(int err)
{
	static const char * const errors[] = {
		"Unknown error", /* 0 */
		"Device disabled",
		"Device not found",
		"Device disconnected",
		"Invalid USSD",
		"Invalid phone number",
		"Cannot parse UTF-8",
		"Cannot parse UCS-2",
		"Cannot encode GSM7",
		"Cannot pack GSM7",
		"Cannot decode GSM7", /* 10 */
		"SMSDB error",
		"Queue error",
		"PDU building error",
		"Can't parse +CMGR response line",
		("Parsing messages in TEXT mode is not supported anymore; "
		 "This message should never appear. Nevertheless, if this "
		 "message appears, please report on GitHub."),
		"Invalid TPDU length in CMGR PDU status line",
		"Malformed hex string",
		"Invalid SCA",
		"Invalid TPDU type",
		"Cannot parse TPDU", /* 20 */
		"Invalid timestamp",
		"Invalid charset",
		"Cannot build SCA",
		"Cannot build phone number",
		"Input too large"
	};
	return enum2str(err,
		 errors,
		 ITEMS_OF(errors));
}

EXPORT_DECL __thread int chan_dongle_err;

#endif
