#include <swilib.h>
#include "main.h"
#include "string_util.h"
#include "jabber_util.h"
#include "lang.h"
#include "rect_patcher.h"

SOFTKEY_DESC m_menu_sk[]=
{
  {0x0018,0x0000,(int)LG_SELECT},
  {0x0001,0x0000,(int)LG_BACK},
  {0x003D,0x0000,(int)LGP_DOIT_PIC}
};

SOFTKEYSTAB m_menu_skt=
{
  m_menu_sk,0
};

int med1_onkey(GUI *data, GUI_MSG *msg)
{
  // Если зелёная кнопка либо нажата кнопка, которую мы повесили в cmd=7
  if(msg->gbsmsg->submess==GREEN_BUTTON || msg->keys==0x18)
  {
    EDITCONTROL ec;
    int utf8_len = 0;
    char * conf_name = 0;
    char * user_name = 0;
    char * pass_name = 0;
    // Конференция
    ExtractEditControl(data, 2, &ec);
    if(ec.pWS->wsbody[0])
    {

      conf_name = malloc(ec.pWS->wsbody[0] * 2 + 1);
      ws_2utf8(ec.pWS, conf_name, &utf8_len, ec.pWS->wsbody[0] * 2 + 1);
      conf_name = realloc(conf_name, utf8_len + 1);
      conf_name[utf8_len]='\0';
      if(conf_name[0]=='@')
      {
        mfree(conf_name);
        MsgBoxError(1,(int)LG_NONAMECONF);
        return 0;
      }
    }
    // Ник
    ExtractEditControl(data, 4, &ec);
    if(ec.pWS->wsbody[0])
    {
      user_name = malloc(ec.pWS->wsbody[0] * 2 + 1);
      ws_2utf8(ec.pWS, user_name, &utf8_len, ec.pWS->wsbody[0] * 2 + 1);
      user_name = realloc(user_name, utf8_len + 1);
      user_name[utf8_len]='\0';
    }
    // Пароль
    ExtractEditControl(data, 6, &ec);
    if(ec.pWS->wsbody[0])
    {
      pass_name = malloc(ec.pWS->wsbody[0] * 2 + 1);
      ws_2utf8(ec.pWS, pass_name, &utf8_len, ec.pWS->wsbody[0] * 2 + 1);
      pass_name = realloc(pass_name, utf8_len + 1);
      pass_name[utf8_len]='\0';
    }
    // Число сообщений
    ExtractEditControl(data, 8, &ec);
    char ss[10];
    extern const char percent_d[];
    ws_2str(ec.pWS, ss, 15);
    int n_messages=0;
    sscanf(ss,percent_d, &n_messages);

    if(user_name && conf_name) Enter_Conference(conf_name, user_name, pass_name, n_messages);
    if(user_name) mfree(user_name);
    if(pass_name) mfree(pass_name);
    if(conf_name) mfree(conf_name);
    return 1;
  }
  if (msg->keys==0x0FF0) //Левый софт СГОЛД
  {
    return(1);
  }
  return 0;
}

void med1_ghook(GUI *data, int cmd)
{
  EDITCONTROL ec;
  static SOFTKEY_DESC mmmmsk={0x0018, 0x0000,(int)LG_ENTER};

  if (cmd == TI_CMD_REDRAW)
  {
    //OnRun
    ExtractEditControl(data,2,&ec);
#ifndef NEWSGOLD
  static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE};
#endif
#ifdef NEWSGOLD
    SetSoftKey(data,&mmmmsk,0);
#else
    SetSoftKey(data,&mmmmsk,1);
    if (ec.pWS->wsbody[0]==0)
      SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0);
#endif
  }

  if(cmd == TI_CMD_FOCUS)   // Фокусирование
  {
     DisableIDLETMR();   // Отключаем таймер выхода по таймауту
  }
}


HEADER_DESC med1_hdr={0,0,131,21,NULL,(int)LG_ENTERMUC,LGP_NULL};

void med1_locret(void){}

INPUTDIA_DESC med1_desc=
{
  1,
  med1_onkey,
  med1_ghook,
  (void *)med1_locret,
  0,
  &m_menu_skt,
  {0,22,131,153},
  4,
  100,
  101,
  0,
  0,
  0x40000000
};

void Disp_MUC_Enter_Dialog(char* muc, char* nick, char* pass)
{
  extern const char USERNAME[32];
  extern const char DEFAULT_MUC[64];
  extern const char DEFAULT_MUC_NICK[64];
  extern const unsigned int DEFAULT_MUC_MSGCOUNT;

  EDITCONTROL ec;
  void * ma = malloc_adr();
  void * eq = AllocEQueue(ma,mfree_adr());
  WSHDR * ws = AllocWS(256);

  PrepareEditControl(&ec);

  ascii2ws(ws, LG_NAMEMUC);
  ConstructEditControl(&ec, ECT_HEADER, ECF_APPEND_EOL, ws, ws->wsbody[0]);
  AddEditControlToEditQend(eq,&ec,ma);

  if (muc) utf8_2ws(ws, muc, 128);
    else utf8_2ws(ws, (char*)DEFAULT_MUC, 128);
  ConstructEditControl(&ec, ECT_NORMAL_TEXT, ECF_APPEND_EOL, ws, 128);      //2
  AddEditControlToEditQend(eq,&ec,ma);

  ascii2ws(ws, LG_NICK);
  ConstructEditControl(&ec, ECT_HEADER, ECF_APPEND_EOL, ws, ws->wsbody[0]);
  AddEditControlToEditQend(eq,&ec,ma);
  if(nick) utf8_2ws(ws, nick, 80);
  else
  {
   if(strlen(DEFAULT_MUC_NICK)) utf8_2ws(ws, (char*)DEFAULT_MUC_NICK, 80);
   else utf8_2ws(ws, (char*)USERNAME, 80);
  }
  ConstructEditControl(&ec, ECT_NORMAL_TEXT, ECF_APPEND_EOL, ws, 80);     // 4
  AddEditControlToEditQend(eq,&ec,ma);

  ascii2ws(ws, LG_PASSWORD);
  ConstructEditControl(&ec, ECT_HEADER,ECF_APPEND_EOL, ws, ws->wsbody[0]);
  AddEditControlToEditQend(eq,&ec,ma);
  if(pass) utf8_2ws(ws, pass, 80);
    else ascii2ws(ws, "");
  ConstructEditControl(&ec, ECT_NORMAL_TEXT, ECF_APPEND_EOL, ws, 80);     // 6
  AddEditControlToEditQend(eq,&ec,ma);

  ascii2ws(ws, LG_GETMESSAGECOUNT);
  ConstructEditControl(&ec, ECT_HEADER, ECF_APPEND_EOL, ws, ws->wsbody[0]);
  AddEditControlToEditQend(eq,&ec,ma);

  wsprintf(ws, "%d", DEFAULT_MUC_MSGCOUNT);
  ConstructEditControl(&ec,5,ECF_APPEND_EOL, ws, 2);    //8
  AddEditControlToEditQend(eq,&ec,ma);

  FreeWS(ws);
  patch_input(&med1_desc);
  patch_header(&med1_hdr);
  CreateInputTextDialog(&med1_desc, &med1_hdr,eq, 1, 0);
}

//EOL,EOF
