#include "datamanager.h"
#include <QDebug>
#include <QCoreApplication>
#include <QFile>
DataManager::DataManager(QObject * parent ):QObject(parent)
{
    init();
};
DataManager::~DataManager()
{

}
 DataManager& DataManager::instance()
{
     static DataManager dataManager;
     return dataManager;

}

void DataManager::init()
{
    QString  sFileName = QCoreApplication::applicationDirPath()+"/medicalRecode.db";
    //bool bexist = QFile::exists(sFileName);
    //if(bexist)
    {
        SqlCore::init("QSQLITE","user","passdwd",sFileName);
    }
    initTable();
}
void DataManager::initTable()
{

    //病例信息
    {
        /*
            病历管理
               检查号
               类型: 住院或门诊
               姓名
               性别 男女
               出生日期
               年龄
               左右利Laterality  左右
               检查日期  inspection
               其他信息
          */

           QMap<QString, QString> map;
           map.insert("f_CheckNum", "TEXT  PRIMARY KEY");
           map.insert("f_Type", "TEXT NOT NULL");
           map.insert("f_Name", "TEXT NOT NULL");
           map.insert("f_Sex", "TEXT NOT NULL");
           map.insert("f_Birthday", "TEXT NOT NULL");
           map.insert("f_Year", "TEXT NOT NULL");
           map.insert("f_Laterality", "TEXT NOT NULL");
            map.insert("f_InspectDate", "TEXT NOT NULL");
           map.insert("f_Other", "TEXT NOT NULL");
        SqlGenerate sqlGener;
        QString sql = sqlGener.createTable("t_RecodManage",map);
        qDebug()<<sql<<endl;
        m_sqlcore.execute(sql);
    }
    //医院信息
    {
        /*
           医院名称
           用户名称
           科室
           用户密码
           用户人数
           确认密码
           数据名称
        */
        QMap<QString, QString> map;
        map.insert("f_Id", "TEXT  PRIMARY KEY");
        map.insert("f_HostpitalName", "TEXT  ");
        map.insert("f_UserName", "TEXT NOT NULL");
        map.insert("f_Section", "TEXT NOT NULL");
        map.insert("f_UserPasswd", "TEXT NOT NULL");
        map.insert("f_UserNum", "TEXT NOT NULL");
        map.insert("f_RePasswd", "TEXT NOT NULL");
        map.insert("f_DataName", "TEXT NOT NULL");

     SqlGenerate sqlGener;
     QString sql = sqlGener.createTable("t_Hostpital",map);
     qDebug()<<sql<<endl;
     m_sqlcore.execute(sql);
    }

}

//更新医院信息
bool   DataManager::updateHospitalInfo(QString sHostpitalName,
                                       QString UserName,
                                       QString sSection,
                                       QString UserPasswd,
                                       QString UserNum,
                                       QString RePasswd,
                                       QString DataName)

{

    QMap<QString, QVariant> map;
    map.insert("f_Id", 0);
    map.insert("f_HostpitalName", sHostpitalName);
    map.insert("f_UserName", UserName);
    map.insert("f_Section", sSection);
    map.insert("f_UserPasswd", UserPasswd);
    map.insert("f_UserNum", UserNum);
    map.insert("f_RePasswd", RePasswd);
    map.insert("f_DataName",DataName);

    SqlGenerate sqlGener;
    QString sql = sqlGener.insertData("t_Hostpital",map);
    qDebug()<<sql<<endl;
    return  m_sqlcore.execute(sql);

}

bool  DataManager::HospitalInfo(QString& sHostpitalName,
                   QString& UserName,
                   QString& sSection,
                   QString& UserPasswd,
                   QString& UserNum,
                   QString& RePasswd,
                   QString& DataName)
{

    QStringList listName;
    listName<<"f_HostpitalName";
    listName<<"f_UserName";
    listName<<"f_Section";
    listName<<"f_UserPasswd";
    listName<<"f_UserNum";
    listName<<"f_RePasswd";
    listName<<"f_DataName";
    SqlGenerate sqlGener;
    QString sql = sqlGener.selectWhere("t_Hostpital",listName);

     bool ret =false;
      auto query(m_sqlcore.select(sql));
      if (query.isNull())
      {

          return ret;
      }
      while (query->next())
      {
          int i =0;
          sHostpitalName = query->value(i++).toString();;
          UserName = query->value(i++).toString();
           sSection= query->value(i++).toString();
           UserPasswd = query->value(i++).toString();
          UserNum = query->value(i++).toString();
          RePasswd = query->value(i++).toString();
           DataName = query->value(i++).toString();

      }

      query->finish();
      query->clear();

      return true;
}
bool   DataManager::updateMedicRecord(
           QString CheckNum ,
           QString Type ,
           QString  _Name ,
           QString Sex,
           QString Birthday,
           QString Year,
           QString Laterality,
           QString InspectDate,
           QString Other)
{
     QMap<QString, QVariant> map;
    map.insert("f_CheckNum", CheckNum);
    map.insert("f_Type", Type);
    map.insert("f_Name", _Name);
    map.insert("f_Sex", Sex);
    map.insert("f_Birthday", Birthday);
    map.insert("f_Year", Year);
    map.insert("f_Laterality", Laterality);
    map.insert("f_InspectDate", InspectDate);
    map.insert("f_Other", Other);
    SqlGenerate sqlGener;
    QString sql = sqlGener.insertData("t_RecodManage",map);
    qDebug()<<sql<<endl;
    return m_sqlcore.execute(sql);
}
int  DataManager::getMedicRecordCount( QString sName)
{
    int ret  = -1;
     QString querySql = QString("select count(*) from t_RecodManage where f_Name LIKE '%") + sName + "%';";
      //qDebug() << "querySql = " << querySql << endl;
      auto query(m_sqlcore.select(querySql));
      if (!query.isNull())
      {
          if (query->first())
          {
              ret = query->value(0).toInt();
          }
          query->finish();
          query->clear();
      }

      return ret;


}
uint  DataManager::getMedicRecordList(const QString& fileName,
                                 QList<MedicRecord>& filesInfo,
                                 int& curPage,
                                 int perPageCnt)
{
    uint ret = 0;
      filesInfo.clear();
      QString tmpFileName = fileName;     
      QString querySql = QString("SELECT f_CheckNum,f_Type,f_Name, f_Sex,f_Birthday,f_Year,f_Laterality,f_InspectDate,f_Other from t_RecodManage where f_Name LIKE '%") + tmpFileName + "%'";
      querySql += QString(" LIMIT %1 offset %2;").arg(perPageCnt)
                                                 .arg(curPage * perPageCnt);

      auto query(m_sqlcore.select(querySql));
      if (query.isNull())
      {

          return 0;
      }
      while (query->next())
      {
          MedicRecord  info;
          info.m_CheckNum= query->value(0).toString();
          info.m_Type = query->value(1).toString();
          info.m_Name = query->value(2).toString();
          info.m_Sex = query->value(3).toString();
          info.m_Birthday = query->value(4).toString();
          info.m_Year = query->value(5).toString();
          info.m_Laterality = query->value(6).toString();
          info.m_InspectDate= query->value(7).toString();
          info.m_Other = query->value(8).toString();

          filesInfo.append(info);
          ++ret;
      }
      if (ret > 0)
      {
          ++curPage;
      }

      query->finish();
      query->clear();

      return ret;
}
 bool  DataManager::deleteNumRecode(QString checkNum)
 {
    SqlGenerate sqlGener;

   QString sql = QString("delete from %1 where %2").arg("t_RecodManage").arg("f_CheckNum = '"+checkNum+"';");

    return m_sqlcore.execute(sql);

 }