/*
 * Bank Code - Adapted By Xeroth from Judson Knott's Banking System
 */
#include "include.h"
#include "interp.h"
#include "tables.h"

void do_balance ( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];

    if (IS_NPC(ch))
	return;

    sprintf( buf, "You have %ld gold and %ld silver in the bank.\n\r",
		ch->pcdata->bankGold, ch->pcdata->bankSilver);
    send_to_char( buf, ch );
    return;
}

void do_deposit ( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *banker;
    char arg1[MAX_INPUT_LENGTH];
	char arg2[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    long amnt;

    if (IS_NPC(ch))
	return;

    if (!IS_SET(ch->in_room->room_flags, ROOM_BANK) ) 
    {
	sprintf( buf, "But you are not in a bank.\n\r" );
	send_to_char( buf, ch );
	return;
    }

    banker = NULL;
    for ( banker = ch->in_room->people; banker; banker = banker->next_in_room )
    {
	if ( IS_NPC( banker ) && IS_SET(banker->pIndexData->act, ACT_BANKER) )
	    break;
    }

    if ( !banker )
    {
	sprintf( buf, "The banker is currently not available.\n\r" );
	send_to_char( buf, ch );
	return;
    }

	argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );


    if ( arg1[0] == '\0' )
    {
	sprintf( buf, "How much do you wish to deposit?\n\r" );
	send_to_char( buf, ch );
	return;
    }

    amnt = atoi( arg1 );

	if(!str_cmp (arg2, "gold"))
	{
		if ( amnt >= (ch->gold + 1) )
		{
		sprintf( buf, "%s, you do not have %ld gold coins.\n\r", ch->name, amnt );
		send_to_char(buf, ch);
		return;
		}

		ch->pcdata->bankGold += amnt;
		ch->gold -= amnt;
		sprintf( buf, "%s tells you, 'Your account now contains: %ld  gold and %ld silver'\n\r",
			banker->short_descr, ch->pcdata->bankGold, ch->pcdata->bankSilver );
		send_to_char(buf, ch);
		return;
	}

	if(!str_cmp (arg2, "silver"))
	{
		if ( amnt >= (ch->silver + 1) )
		{
		sprintf( buf, "%s, you do not have %ld silver coins.\n\r", ch->name, amnt );
		send_to_char(buf, ch);
		return;
		}

		ch->pcdata->bankSilver += amnt;
		ch->silver -= amnt;
		sprintf( buf, "%s tells you, 'Your account now contains: %ld  gold and %ld silver'\n\r",
			banker->short_descr, ch->pcdata->bankGold, ch->pcdata->bankSilver );
		send_to_char(buf, ch);
		return;
	}

	sprintf(buf, "Invalid syntax: deposit <amount> <gold/silver>\n\r");
	send_to_char(buf, ch);
}


void do_withdraw ( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *banker;
    char arg1[MAX_INPUT_LENGTH];
	char arg2[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    long amnt;

    if (IS_NPC(ch))
	return;

    if (!IS_SET(ch->in_room->room_flags, ROOM_BANK) ) 
    {
	sprintf( buf, "But you are not in a bank.\n\r" );
	send_to_char( buf, ch );
	return;
    }

    banker = NULL;
    for ( banker = ch->in_room->people; banker; banker = banker->next_in_room )
    {
	if ( IS_NPC( banker ) && IS_SET(banker->pIndexData->act, ACT_BANKER) )
	    break;
    }

    if ( !banker )
    {
	 sprintf( buf, "The banker is currently not available.\n\r" );
	 send_to_char( buf, ch );
	 return;
    }
 
    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );
    

    if ( arg1[0] == '\0' )
    {
	 sprintf( buf, "How much gold do you wish to withdraw?\n\r" );
	 send_to_char( buf, ch );
	 return;
    }

    amnt = atoi( arg1 );
    
    if(!str_cmp (arg2, "gold"))
	{
		if ( amnt >= (ch->pcdata->bankGold + 1) )
		{
		sprintf( buf, "%s, you do not have %ld gold coins in the bank.\n\r", ch->name, amnt );
		send_to_char(buf, ch);
		return;
		}

		ch->pcdata->bankGold -= amnt;
		ch->gold += amnt;
		sprintf( buf, "%s tells you, 'Your account now contains: %ld  gold and %ld silver'\n\r",
			banker->short_descr, ch->pcdata->bankGold, ch->pcdata->bankSilver );
		send_to_char(buf, ch);
		return;
	}

	if(!str_cmp (arg2, "silver"))
	{
		if ( amnt >= (ch->pcdata->bankSilver + 1) )
		{
		sprintf( buf, "%s, you do not have %ld silver coins in the bank.\n\r", ch->name, amnt );
		send_to_char(buf, ch);
		return;
		}

		ch->pcdata->bankSilver -= amnt;
		ch->silver += amnt;
		sprintf( buf, "%s tells you, 'Your account now contains: %ld  gold and %ld silver'\n\r",
			banker->short_descr, ch->pcdata->bankGold, ch->pcdata->bankSilver );
		send_to_char(buf, ch);
		return;
	}

	sprintf(buf, "Invalid syntax: withdraw <amount> <gold/silver>\n\r");
	send_to_char(buf, ch);
}