/**************************************************************
 * FFTacticsMUD : ignore.cpp                                  *
 **************************************************************
 * (c) 2002 Damien Dailidenas (Trenton). All rights reserved. *
 **************************************************************/

#include "main.h"
#include <set>
#include <strstream>
#include <mysql/mysql.h>

void CH::ignore_add(const string name) {
  for(short x = 0; x < MAX_IGNORE; ++x) {
    if(ignore[x].empty()) {
      ignore[x] = name;
      printf("Now ignoring " + name + "!\n\r");
      return;
    }
  }
        
  return;
}
      
void CH::ignore_remove(const string name) {
  for(short x = 0; x < MAX_IGNORE; ++x) {
    if(ignore[x] == name) {
      ignore[x] = "";
      printf("No longer ignoring " + name + ".\n\r");
      return;
    }
  }
    
  return;  
}  

void CH::ignore_list() {
  string str;
  set<string> s_set;
  set<string>::iterator x;
      
  for(short n = 0; n < MAX_IGNORE; ++n)
    if(!ignore[n].empty())
      s_set.insert(ignore[n]);
        
  for(x = s_set.begin(); x != s_set.end(); ++x) {
    str += *x;
      
    if(++x != s_set.end())
      str += ", ";
      
    --x;
  }  
   
  if(s_set.empty())
    return;
    
  ostrstream ost;
  ost << header("IGNORING") << f_str_box(str, false, false) << ends;
  printf(ost.str());
  return;
}

bool CH::ignoring(const string name) {
  for(short x = 0; x < MAX_IGNORE; ++x)
    if(ignore[x] == name)
      return true;
      
  return false;
}

void CH::save_ignored() {
  MYSQL mysql;
  mysql_init(&mysql);
    
  if(npc || !mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0))
    return;
  
  ostrstream ost;
  ost << "DELETE FROM ignore_data WHERE ch='" + name + "'" << ends;
  mysql_query(&mysql, ost.str());
  
  for(short x = 0; x < MAX_IGNORE; ++x) {
    ost.freeze(false);
    ost.seekp(0, ios::beg);
    ost << "INSERT INTO ignore_data(ch, ignored) values('" + name + "', '" + ignore[x] + "')" << ends;
    mysql_query(&mysql, ost.str());
  }
  
  mysql_close(&mysql);
  return;
}

void CH::load_ignored() {
  MYSQL mysql;
  MYSQL_RES *res;
  MYSQL_ROW row;
  mysql_init(&mysql);

  if(!mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0))
    return;   

  ostrstream ost;
  ost << "SELECT ignored FROM ignore_data WHERE ch='" << name << "'" << ends;
  mysql_query(&mysql, ost.str());
  res = mysql_store_result(&mysql);

  short x = 0;
    
  while((row = mysql_fetch_row(res)))
    ignore[x++] = row[0];
  
  mysql_free_result(res);
  mysql_close(&mysql);
  return;  
}

void do_ignore(CH *ch, string argument = "") {
  CH *ch2 = NULL;
  
  if(argument.empty() || !(ch2 = get_ch(argument)) || ch2 == ch || ch2->npc) {
    ch->printf("Usage: ignore [name]\n\r");
    return;
  }
   
  if(ch->ignoring(ch2->name)) {
    ch->printf("ignore: ERROR: " + ch2->name + " already ignored.\n\r");
    return;
  }
   
  ch->ignore_add(ch2->name);
  return;
}
 
void do_acknowledge(CH *ch, string argument = "") {
  if(argument.empty() || !ch->ignoring(capitalize(argument))) {
    ch->printf("Usage: acknowledge [name]\n\r");
    ch->ignore_list();
    return;
  }
   
  ch->ignore_remove(capitalize(argument));
  return;
}