/***************************************************************************
*   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 <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "merc.h"
#include "tables.h"
#include "olc.h"
#include "recycle.h"
#include "mysql.h"

#define DREDIT( fun )	bool fun(CHAR_DATA *ch, char*argument)
DREAM_DATA	*	pDream;

DREDIT(dredit_show)
{
    char buf[MSL*2];
    int i;
    EDIT_DREAM( ch, pDream);
    
    printf_to_char( ch, "ID    : [%d]\n\r", pDream->index);
    printf_to_char( ch, "Title : %s\n\r", pDream->title);
    printf_to_char( ch, "Author: %s\n\r", pDream->author);
    printf_to_char( ch, "%s :\n\r", pDream->type);
    for (i = 0; i < 10; i++)
    {
    	sprintf(buf, "Phase %d : [%s]\n\r", i + 1, pDream->line[i]);
	send_to_char( Justify(buf,70,justify_left), ch);    
	send_to_char( "\n\r", ch);
    }
    return FALSE;
}

DREDIT(dredit_title)
{
    EDIT_DREAM(ch, pDream);
    
    if ( IS_NULLSTR(argument) )
    {
        send_to_char( "Syntax : title [dream title]\n\r", ch );
        return FALSE;
    }
    
    free_string(pDream->title);
    pDream->title = str_dup(argument);
    
    send_to_char( "Title Set.\n\r", ch );
    return TRUE;
}

DREDIT(dredit_type)
{
    EDIT_DREAM(ch, pDream);

    if ( IS_NULLSTR(argument) || !str_cmp(argument, "dream") || !str_cmp(argument, "nightmare"))
    {
        send_to_char( "Syntax : title [dream or nightmare]\n\r", ch );
        return FALSE;
    }

    free_string(pDream->type);
    pDream->type = str_dup(argument);

    send_to_char( "Title Set.\n\r", ch );
    return TRUE; 
}

DREDIT(dredit_author)
{
    EDIT_DREAM(ch, pDream);

    if ( IS_NULLSTR(argument) )
    {
        send_to_char( "Syntax : author [author name]\n\r", ch );
        return FALSE;
    }

    free_string(pDream->author);
    pDream->author = str_dup(argument);
        
    send_to_char( "Ok.\n\r", ch );
    return TRUE;
}

DREDIT(dredit_create)
{
    char    argone[MIL],cleaned[MIL],query[MIL];
    int	    records;
    char    sql[MSL*2];
    char    esctext[MSL*2];
    MYSQL_RES *result;

    argument = one_argument( argument, argone );
    if ( IS_NULLSTR(argone) )
    {
        send_to_char( "Syntax : create [title]\n\r", ch );
        return FALSE;
    }

    mysql_escape_string(cleaned, argone, strlen(argone));
    result = NULL;

    sprintf(sql, "SELECT * FROM dreams WHERE title LIKE '%%%s%%'", argone);
    if (mysql_real_query(mysqlconn, sql, strlen(sql)) != 0)
    {
	logf("dredit_create died attempting query for %s", argone);
	send_to_char( "Error while getting a query from the database. Please inform an Imm.\n\r", ch );
	return FALSE;
    }
    result = mysql_store_result(mysqlconn);
    records = mysql_num_rows(result);
    if ( records > 0 )
    {
        send_to_char( "There is already a dream with this title.\n\r", ch );
        return FALSE;
    }
    {
        int i;
        for ( i = 0; cleaned[i] != '\0'; i++ )
            cleaned[i] = UPPER(cleaned[i]);
        pDream		    = new_dream();
        pDream->title	= str_dup(cleaned);
	for (i = 0; i < 10; i++)
            pDream->line[i]	= str_dup( "NONE" );
        pDream->author = str_dup("");
        pDream->type = str_dup("Dream");
	mysql_escape_string(esctext, pDream->author, strlen(pDream->author));

        sprintf( query, "INSERT INTO dreams VALUES (NULL, \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')",
            pDream->title, pDream->line[0], pDream->line[1], pDream->line[2], pDream->line[3], pDream->line[4], 
	    pDream->line[5], pDream->line[6], pDream->line[7], pDream->line[8], pDream->line[9], pDream->author, esctext);


        if (!mysql_real_query(mysqlconn, query, strlen(query)))
        {
	    printf_to_char( ch, "Added dream: %s\n\r", pDream->title);
            ch->desc->pEdit 	= (DREAM_DATA *) pDream;
            ch->desc->editor	= ED_DREAM;
            send_to_char( "Ok.\n\r", ch );
            return TRUE;
        }
    }
    return FALSE;
}

DREDIT( dredit_phase )
{
    char arg1[2];
    int line;
    EDIT_DREAM(ch, pDream);
                
    if ( IS_NULLSTR(argument) )
    {
        send_to_char( "Syntax : line [number] [phase]\n\r", ch );
        return FALSE; 
    }   
    argument = one_argument(argument, arg1);
    line = atoi(arg1) - 1;
    if (line < 10 && line >= 0)
        pDream->line[line] = str_dup(argument);
    return TRUE;
}

void dredit(CHAR_DATA *ch, char *argument)
{
    char arg[MAX_INPUT_LENGTH];
    char command[MAX_INPUT_LENGTH];
    int cmd;
    
    smash_tilde(argument);
    strcpy(arg, argument);
    argument = one_argument( argument, command);
    
    EDIT_DREAM(ch, pDream);
    
    if (command[0] == '\0')
    {
        dredit_show(ch, argument);
        return;
    }
    
    if (!str_cmp(command, "done") )
    {
        dredit_save(ch, "argument");
        free_dream(pDream);
        edit_done(ch);
        return;
    }
    for (cmd = 0; dredit_table[cmd].name != NULL; cmd++)
    {
        if (!str_prefix(command, dredit_table[cmd].name) )
        {
            if ((*dredit_table[cmd].olc_fun) (ch, argument))
                cmd = cmd;
            return;
        }
    }
    interpret(ch, arg);
    return;
}

void do_dredit(CHAR_DATA *ch, char *argument)
{
    char    cleaned[MIL * 2];
    char    sql[MSL*2];
    sh_int    argone;
    int     records = 0;
    char    output[MSL*2];
    MYSQL_RES *result;
    MYSQL_ROW row;
    result	=	NULL;
    
    EDIT_DREAM(ch, pDream);
    
    mysql_escape_string(cleaned, argument, strlen(argument));
    argone = atoi(argument);
    output[0] = '\0';

    sprintf(sql, "SELECT * FROM dreams WHERE id = %d", argone);
    if (mysql_real_query(mysqlconn, sql, strlen(sql)) != 0)
    {
        logf("do_dredit died attempting query for %s", argone);
        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)
    {
	printf_to_char( ch, "No dream entry found by the id: %s. Use DREAMLIST to see ids.\n\r", argone );
        return;
    }

    mysql_real_query(mysqlconn, sql, strlen(sql));
    result = mysql_store_result(mysqlconn);
    records = mysql_num_rows(result);

    pDream = new_dream();

    row = mysql_fetch_row(result);
    pDream->index = atoi(row[0]);
    pDream->title = str_dup(row[1]);
    pDream->line[0] = str_dup(row[2]);
    pDream->line[1] = str_dup(row[3]);
    pDream->line[2] = str_dup(row[4]);
    pDream->line[3] = str_dup(row[5]);
    pDream->line[4] = str_dup(row[6]);
    pDream->line[5] = str_dup(row[7]);
    pDream->line[6] = str_dup(row[8]);
    pDream->line[7] = str_dup(row[9]);
    pDream->line[8] = str_dup(row[10]);
    pDream->line[9] = str_dup(row[11]);
    pDream->author = str_dup(row[12]);
    pDream->type = str_dup(row[13]);
    printf_to_char( ch, "Number: %d\n\r", pDream->index );
    printf_to_char( ch, "Title: %s\n\r", pDream->title);
    printf_to_char( ch, "Author: %s\n\r", pDream->author);
    printf_to_char( ch, "Type  : %s\n\r", pDream->type);
    ch->desc->pEdit 	= (void *) pDream;
    ch->desc->editor	= ED_DREAM;
    
    return;
}

DREDIT(dredit_delete)
{
    DESCRIPTOR_DATA  *d;
    char    query[3*MSL];
    
    for ( d = descriptor_list; d; d = d->next )
    {
        if ( d->editor == ED_DREAM && pDream == (DREAM_DATA *) d->pEdit )
            edit_done(d->character);
    }	

    sprintf(query, "DELETE FROM dreams WHERE id=%d", pDream->index);

    if (!mysql_real_query(mysqlconn, query, strlen(query)))
    {
	printf_to_char( ch, "Dream entry deleted successfully: %d %s\n\r", pDream->index, pDream->title);
        free_dream(pDream);
        return TRUE;
    }
    return FALSE;
}

DREDIT(dredit_save)
{
    char        query[3*MSL];
    char        esctext[3*MSL];
     
    mysql_escape_string(esctext, pDream->line[9], strlen(pDream->line[9]));
    sprintf(query, "UPDATE dreams SET title=\'%s\', line1=\'%s\', line2=\'%s\', line3=\'%s\',line4=\'%s\', line5=\'%s\', line6=\'%s\', line7=\'%s\', line8=\'%s\', line9=\'%s\', line10=\'%s\' WHERE id=%d",
            pDream->title, pDream->line[0], pDream->line[1], pDream->line[2],
            pDream->line[3], pDream->line[4], pDream->line[5], pDream->line[6], pDream->line[7],
            pDream->line[8], esctext, pDream->index);
    if (!mysql_real_query(mysqlconn, query, strlen(query)))
    {
        printf_to_char( ch, "Updated Dream: %d %s\n\r", pDream->index, pDream->title);
        return TRUE;
    }
    return FALSE;
}