/***************************************************************************
*   MND is copyright 2000-2002 Charles Tillery (Muerte/Ao)                 *
*   http://www.mudsanddragons.com                                          *
*   3e D&D Mud Project                                                     *
*   This header is not to be removed from ANY file                         *
***************************************************************************/

#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include "merc.h"
#include "mysql.h"

void dream_event(CHAR_DATA * ch)
{
    char 	buf[MIL];
    int		records, number, line;
    char	sql[MSL*2];
    MYSQL_RES   *result;

    if (ch->dream[DREAM_PHASE] == 0)
    {
     	number = dice(1,1);
    	line  = dice(1,10);
	ch->dream[DREAM_NUMBER] = number;
	ch->dream[DREAM_PHASE]	= line;
    }
    result = NULL;
    if( ch->dream[DREAM_TYPE] == DREAM_TYPE_NIGHTMARE )
    	sprintf(sql, "SELECT line%d FROM dreams WHERE id=%d AND type LIKE author LIKE '%%%s%%'", ch->dream[DREAM_PHASE], ch->dream[DREAM_NUMBER], "Nightmare");
    else
        sprintf(sql, "SELECT line%d FROM dreams WHERE id =%d", ch->dream[DREAM_PHASE], ch->dream[DREAM_NUMBER]);
	if (mysql_real_query(mysqlconn, sql, strlen(sql)) != 0)
	{
	    logf("do_dream died attempting query for dream %d", number);
	    send_to_char( "Error while getting a query from the database. Please inform an Imm.\n\r", ch );
	    return;
	}
	result = mysql_store_result(mysqlconn);
	records = mysql_num_rows(result);
	if (records < 1)
	{
	    logf("DO_DREAM: dream not found for: %d", number);
	    if(ch->dream[DREAM_TYPE] == DREAM_TYPE_NIGHTMARE)
		printf_to_char( ch, "I'm watching you %s.\n\r", ch->name);
	    else
	        printf_to_char( ch, "zZzZZzzzzzzzzzzzzzzzzzZZZZZZZZZZZZZZZZ.\n\r", 0);
	    return;
	}
	if (records > 0)
	{
	    MYSQL_ROW row;
	    for (; records > 0; records--)
	    {
		row = mysql_fetch_row(result);
		ch->dreamline = str_dup(row[0]);
	    }
	}
        if (!str_cmp(ch->dreamline, "NONE"))
        {
            logf("DO_DREAM: dream not found for: %d", number);
            printf_to_char( ch, "zZzZZzzzzzzzzzzzzzzzzzZZZZzzzzzzzzzZZzZzZzZ.\n\r", 0);
            ch->dream[DREAM_NUMBER] = 0;
            ch->dream[DREAM_PHASE] = 0;
            return;
        }
        sprintf(buf, "%s\n\r", ch->dreamline);
        send_to_char( Justify(buf,70,justify_left), ch);
        printf_to_char(ch, "\n\r");
	ch->dream[DREAM_PHASE] = ch->dream[DREAM_PHASE] + 1;
	if(ch->dream[DREAM_PHASE] > 10)
	{
	    ch->dream[DREAM_NUMBER] = 0;
	    ch->dream[DREAM_PHASE] = 0;
	}
	return;
}

void do_dreamlist(CHAR_DATA * ch, char *argument)
{
    char	arg1[MIL];
    int         records, index;
    char	*title, *author;
    char        sql[MSL*2];
    MYSQL_RES   *result;
    result = NULL;

    printf_to_char(ch, "{R%s{x\n\r", "Dreams");
    argument = one_argument(argument, arg1);
    if (arg1[0] == '\0')
	sprintf(sql, "SELECT id, title, author FROM dreams WHERE 1");
    else if (is_number(arg1))
    	sprintf(sql, "SELECT id, title, author FROM dreams WHERE id=%d", atoi(arg1));
    else
	sprintf(sql, "SELECT id, title, author FROM dreams WHERE title LIKE '%%%s%%' OR author LIKE '%%%s%%'", arg1, arg1);
        if (mysql_real_query(mysqlconn, sql, strlen(sql)) != 0)
        {
            logf("do_dreamlist died attempting query for dreamlist");
            send_to_char( "Error while getting a query from the database. Please inform an Imm.\n\r", ch );
            return;
        }
        result = mysql_store_result(mysqlconn);
        records = mysql_num_rows(result);
        if (records < 1)
        {
            logf("DO_DREAMLIST: no dreams to list");
	    send_to_char("No Dreams match that criteria\n\r", ch);
            return;
        }
        if (records > 0)
        {
            MYSQL_ROW row;
            for (; records > 0; records--)
            {
                row = mysql_fetch_row(result);
                index = atoi(row[0]);
		title = str_dup(row[1]);
		author = str_dup(row[2]);
		printf_to_char(ch, "%5d : %s by %s\n\r", index, title, author);
            }
        }
        return;
}        

void cause_nightmare(CHAR_DATA *ch)
{
    ch->dream[DREAM_TYPE] = DREAM_TYPE_NIGHTMARE;
}

void remove_nightmare(CHAR_DATA *ch)
{
    ch->dream[DREAM_TYPE] = DREAM_TYPE_DREAM;
}

void do_dream(CHAR_DATA *ch)
{
    int         records;
    char        *title, *author;
    char        sql[MSL*2];
    MYSQL_RES   *result;
    result = NULL;
                
    sprintf(sql, "SELECT title, author FROM dreams WHERE id=%d", ch->dream[DREAM_NUMBER]);
    if (mysql_real_query(mysqlconn, sql, strlen(sql)) != 0)
    {
        logf("do_dream died attempting query for dream %d", ch->dream[DREAM_NUMBER]);
        send_to_char( "Error while getting a query from the database. Please inform an Imm.\n\r", ch );
        return;
    }
    result = mysql_store_result(mysqlconn);
    records = mysql_num_rows(result);
    if (records < 1)
    {
        send_to_char("Huh?\n\r", ch);
        return;
    }
    if (records > 0)
    {
        MYSQL_ROW row;
        for (; records > 0; records--)
        {
            row = mysql_fetch_row(result);
            title = str_dup(row[0]);
            author = str_dup(row[1]);
            printf_to_char(ch, "You are experiencing dream %s by %s.\n\r", title, author);
        }
    }
    return;
}