/**
 * @file error.c Error functions
 *
 * purple
 *
 * Purple is the legal property of its developers, whose names are too numerous
 * to list here.  Please refer to the COPYRIGHT file distributed with this
 * source distribution.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#include "nateon.h"
#include "error.h"

const char *
nateon_error_get_text(unsigned int type, gboolean *debug)
{
	static char msg[NATEON_BUF_LEN];
	*debug = FALSE;

	switch (type) {
//		case 0:
//			g_snprintf(msg, sizeof(msg),
//					   _("Unable to parse message"));
//			*debug = TRUE;
//			break;
//		case 200:
//			g_snprintf(msg, sizeof(msg),
//					   _("Syntax Error (probably a client bug)"));
//			*debug = TRUE;
//			break;
//		case 201:
//			g_snprintf(msg, sizeof(msg),
//					   _("Invalid e-mail address"));
//			break;
//		case 205:
//			g_snprintf(msg, sizeof(msg), _("User does not exist"));
//			break;
//		case 206:
//			g_snprintf(msg, sizeof(msg),
//					   _("Fully qualified domain name missing"));
//			break;
//		case 207:
//			g_snprintf(msg, sizeof(msg), _("Already logged in"));
//			break;
//		case 208:
//			g_snprintf(msg, sizeof(msg), _("Invalid screen name"));
//			break;
//		case 209:
//			g_snprintf(msg, sizeof(msg), _("Invalid friendly name"));
//			break;
//		case 210:
//			g_snprintf(msg, sizeof(msg), _("List full"));
//			break;
//		case 215:
//			g_snprintf(msg, sizeof(msg), _("Already there"));
//			*debug = TRUE;
//			break;
//		case 216:
//			g_snprintf(msg, sizeof(msg), _("Not on list"));
//			break;
//		case 217:
//			g_snprintf(msg, sizeof(msg), _("User is offline"));
//			break;
//		case 218:
//			g_snprintf(msg, sizeof(msg), _("Already in the mode"));
//			*debug = TRUE;
//			break;
//		case 219:
//			g_snprintf(msg, sizeof(msg), _("Already in opposite list"));
//			*debug = TRUE;
//			break;
//		case 223:
//			g_snprintf(msg, sizeof(msg), _("Too many groups"));
//			break;
//		case 224:
//			g_snprintf(msg, sizeof(msg), _("Invalid group"));
//			break;
//		case 225:
//			g_snprintf(msg, sizeof(msg), _("User not in group"));
//			break;
//		case 229:
//			g_snprintf(msg, sizeof(msg), _("Group name too long"));
//			break;
//		case 230:
//			g_snprintf(msg, sizeof(msg), _("Cannot remove group zero"));
//			*debug = TRUE;
//			break;
//		case 231:
//			g_snprintf(msg, sizeof(msg),
//					   _("Tried to add a user to a group "
//						 "that doesn't exist"));
//			break;
//		case 280:
//			g_snprintf(msg, sizeof(msg), _("Switchboard failed"));
//			*debug = TRUE;
//			break;
//		case 281:
//			g_snprintf(msg, sizeof(msg), _("Notify transfer failed"));
//			*debug = TRUE;
//			break;
//
//		case 300:
//			g_snprintf(msg, sizeof(msg), _("Required fields missing"));
//			*debug = TRUE;
//			break;
//		case 301:
//			g_snprintf(msg, sizeof(msg), _("Too many hits to a FND"));
//			*debug = TRUE;
//			break;
//		case 302:
//			g_snprintf(msg, sizeof(msg), _("Not logged in"));
//			break;
//
//		case 500:
//			g_snprintf(msg, sizeof(msg), _("Service temporarily unavailable"));
//			break;
//		case 501:
//			g_snprintf(msg, sizeof(msg), _("Database server error"));
//			*debug = TRUE;
//			break;
//		case 502:
//			g_snprintf(msg, sizeof(msg), _("Command disabled"));
//			*debug = TRUE;
//			break;
//		case 510:
//			g_snprintf(msg, sizeof(msg), _("File operation error"));
//			*debug = TRUE;
//			break;
//		case 520:
//			g_snprintf(msg, sizeof(msg), _("Memory allocation error"));
//			*debug = TRUE;
//			break;
//		case 540:
//			g_snprintf(msg, sizeof(msg), _("Wrong CHL value sent to server"));
//			*debug = TRUE;
//			break;
//
//		case 600:
//			g_snprintf(msg, sizeof(msg), _("Server busy"));
//			break;
//		case 601:
//			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
//			break;
//		case 602:
//			g_snprintf(msg, sizeof(msg), _("Peer notification server down"));
//			*debug = TRUE;
//			break;
//		case 603:
//			g_snprintf(msg, sizeof(msg), _("Database connect error"));
//			*debug = TRUE;
//			break;
//		case 604:
//			g_snprintf(msg, sizeof(msg),
//					   _("Server is going down (abandon ship)"));
//			break;
//		case 605:
//			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
//			break;
//
//		case 707:
//			g_snprintf(msg, sizeof(msg), _("Error creating connection"));
//			*debug = TRUE;
//			break;
//		case 710:
//			g_snprintf(msg, sizeof(msg),
//					   _("CVR parameters are either unknown or not allowed"));
//			*debug = TRUE;
//			break;
//		case 711:
//			g_snprintf(msg, sizeof(msg), _("Unable to write"));
//			break;
//		case 712:
//			g_snprintf(msg, sizeof(msg), _("Session overload"));
//			*debug = TRUE;
//			break;
//		case 713:
//			g_snprintf(msg, sizeof(msg), _("User is too active"));
//			break;
//		case 714:
//			g_snprintf(msg, sizeof(msg), _("Too many sessions"));
//			break;
//		case 715:
//			g_snprintf(msg, sizeof(msg), _("Passport not verified"));
//			break;
//		case 717:
//			g_snprintf(msg, sizeof(msg), _("Bad friend file"));
//			*debug = TRUE;
//			break;
//		case 731:
//			g_snprintf(msg, sizeof(msg), _("Not expected"));
//			*debug = TRUE;
//			break;
//
//		case 800:
//			g_snprintf(msg, sizeof(msg),
//					   _("Friendly name changes too rapidly"));
//			break;
//
//		case 910:
//		case 912:
//		case 918:
//		case 919:
//		case 921:
//		case 922:
//			g_snprintf(msg, sizeof(msg), _("Server too busy"));
//			break;
//		case 911:
//		case 917:
//			g_snprintf(msg, sizeof(msg), _("Authentication failed"));
//			break;
//		case 913:
//			g_snprintf(msg, sizeof(msg), _("Not allowed when offline"));
//			break;
//		case 914:
//		case 915:
//		case 916:
//			g_snprintf(msg, sizeof(msg), _("Server unavailable"));
//			break;
//		case 920:
//			g_snprintf(msg, sizeof(msg), _("Not accepting new users"));
//			break;
//		case 923:
//			g_snprintf(msg, sizeof(msg),
//					   _("Kids Passport without parental consent"));
//			break;
//		case 924:
//			g_snprintf(msg, sizeof(msg),
//					   _("Passport account not yet verified"));
//			break;
//		case 928:
//			g_snprintf(msg, sizeof(msg), _("Bad ticket"));
//			*debug = TRUE;
//			break;

		default:
			g_snprintf(msg, sizeof(msg), _("Unknown Error Code %d"), type);
			*debug = TRUE;
			break;
	}

	return msg;
}

void
nateon_error_handle(NateonSession *session, unsigned int type)
{
	char buf[NATEON_BUF_LEN];
	gboolean debug;
	
	g_snprintf(buf, sizeof(buf), _("NATEON Error: %s\n"),
			   nateon_error_get_text(type, &debug));
	if (debug)
		purple_debug_warning("nateon", "error %d: %s\n", type, buf);
	else
		purple_notify_error(session->account->gc, NULL, buf, NULL);
}
