import 'package:rkm/service/db/db_sqlite_load.dart';
import 'package:sqflite/sqflite.dart';

class DbSqliteSync{

  Future deleteSync()async{
      var querys = [
           "DELETE FROM CONTROLE_INTERNO",
           "DELETE FROM BAIRROS;",
           "DELETE FROM LOGRADOUROS_TIPOS;",
           "DELETE FROM LOGRADOUROS_ENDERECOS;",
           "DELETE FROM LOGRADOUROS_LOTEAMENTOS;",
           "DELETE FROM PROFISSIONAIS;",
           "DELETE FROM PROFISSIONAIS_CBOS;",
           "DELETE FROM CIDADAOS;",
           "DELETE FROM CIDADAO_DOMICILIO;",
           "DELETE FROM CADASTROS_INDIVIDUAIS;",
           "DELETE FROM DOMICILIOS_CIDADAOS;"
      ];
      Database db = await DbSqliteLoad().intialDB();
      for(int i=0;querys.length>i;i++){
           db.execute(querys[i]);
      }
 }
  Future insertBairros(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_BAIRRO'   : list[i]['idBairro'],
          'NO_BAIRRO' : list[i]['nomeBairro'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('BAIRROS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> BAIRROS = await db.query('BAIRROS');
      print('Total de BAIRROS : ${BAIRROS.length}');

    return db;
  }
  Future insertTiposLogradouros(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_LOGR_TIPO'    : value[i]['idTipoLogradouro'],
          'NO_LOGR_TIPO'    : value[i]['nomeTipoLogradouro'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('LOGRADOUROS_TIPOS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> LOGRADOUROS_TIPOS = await db.query('LOGRADOUROS_TIPOS');
      print('Total de LOGRADOUROS_TIPOS : ${LOGRADOUROS_TIPOS.length}');
    return db;
  }
  Future insertLogradouros(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_LOGR_ENDERECO'   : value[i]['idLogradouro'],
          'ID_LOGR_TIPO'       : value[i]['idTipoLogradouro'],
          'DESC_LOGR_ENDERECO' : value[i]['descLogradouro'],
          'ID_BAIRRO'          : value[i]['idBairro'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('LOGRADOUROS_ENDERECOS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> LOGRADOUROS_ENDERECOS = await db.query('LOGRADOUROS_ENDERECOS');
      print('Total de LOGRADOUROS_ENDERECOS : ${LOGRADOUROS_ENDERECOS.length}');
    return db;
  }
  Future insertLoteamentos(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_LOGR_LOTEAMENTO'   : value[i]['idLoteamento'],
          'DESC_LOGR_LOTEAMENTO' : value[i]['descLoteamento'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('LOGRADOUROS_LOTEAMENTOS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> LOGRADOUROS_LOTEAMENTOS = await db.query('LOGRADOUROS_LOTEAMENTOS');
      print('Total de LOGRADOUROS_LOTEAMENTOS : ${LOGRADOUROS_LOTEAMENTOS.length}');
    return db;
  }
  Future insertProfissionais(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_PROFISSIONAL'  : value[i]['idProfissional'],
          'NOME_PROFISSIONAL': value[i]['nomeProfissional'],
          'CNS_PROFISSIONAL' : value[i]['CNSProfissional'],
          'USERNAME'         : value[i]['username'],
          'SENHA'            : value[i]['senha'],
          'BLOQUEIO_ACESSO'  : value[i]['bloqueioAcesso'],
          'ID_UNIDADE'       : value[i]['idUnidade'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('PROFISSIONAIS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> PROFISSIONAIS = await db.query('PROFISSIONAIS');
      print('Total de PROFISSIONAIS : ${PROFISSIONAIS.length}');
    return db;
  }
  Future insertProfissionaisCBOs(var value)async{
    List list = value;
    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_PROFISSIONAL'  : value[i]['idProfissional'],
          'CODIGO_CBO'       : value[i]['codCBO'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('PROFISSIONAIS_CBOS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> PROFISSIONAIS_CBOS = await db.query('PROFISSIONAIS_CBOS');
      print('Total de PROFISSIONAIS_CBOS : ${PROFISSIONAIS_CBOS.length}');
    return db;
  }
  Future insertCidadaos(var value,String type,String CD_USUARIO_SUS)async{

    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();

    if(type=='sync'){
      //para a carga inicial o datalista funciona
      List dataList = value;
      for (int i = 0; i < dataList.length; i++) {
        Map<String, dynamic> row = {
          'ID_CIDADAO'          : value[i]['idCidadao'],
          'CD_USUARIO_SUS'      : value[i]['cdUsuarioSus'],
          'NOME_CIDADAO'        : value[i]['noUsuario'],
          'NOME_SOCIAL'         : value[i]['nomeSocial'],
          'SEXO'                : value[i]['inSexo'],
          'DT_NASCIMENTO'       : value[i]['dtNascimento'],
          'ID_ESTADO_CIVIL'     : value[i]['inSituacaoConjugal'],
          'ID_ESTADO_CIVIL'     : value[i]['inSituacaoConjugal'],
          'NOME_CONJUGE'        : value[i]['noConjugue'],
          'NACIONALIDADE'       : value[i]['nacionalidade'],
          'ID_MUNICIPIO_NASC'   : value[i]['cdMunicipioNasc'],
          'NO_MUNICIPIO_NASC'   : value[i]['noMunicipioNasc'],
          'ESTADO_UF_NASC'      : value[i]['cdEstado'],
          'ID_ETNIA'            : value[i]['cdEtnia'],
          'ID_ETNIA_INDIGENA'   : value[i]['cdEtniaIndigena'],
          'ID_ESCOLARIDADE'     : value[i]['cdUsuarioEscolaridade'],
          'ID_DEFICIENCIA'      : value[i]['nrDeficiencia'],
          'NOME_MAE'            : value[i]['noMae'],
          'DESCONHECE_MAE'      : value[i]['desconheceMae'],
          'NOME_PAI'            : value[i]['noPai'],
          'DESCONHECE_PAI'      : value[i]['desconhecePai'],
          'ID_UNIDADE'          : value[i]['nrUnidade'],
          'NUM_PRONTUARIO'      : value[i]['nrProntuario'],
          'NUM_PRONTUARIO_PROV' : value[i]['nrProntuarioProvisorio'],
          'CLASSIFICACAO'       : value[i]['classificacao'],
          'CLASSIFICACAO_SUB'   : '',
          'NUM_FAMILIA'         : value[i]['nrFamilia'],
          'ID_PAIS_RESID'       : value[i]['idPaisResid'],
          'ID_MUNICIPIO_RESID'  : value[i]['cdMunicipioResid'],
          'NO_MUNICIPIO_RESID'  : value[i]['noMunicipioResid'],
          'ESTADO_UF_RESID'     : value[i]['cdEstadoResid'],
          'CODIGO_IBGE_RESID'   : value[i]['muniCdCodIbgeResid'],
          'NO_BAIRRO_LOGR'      : value[i]['noBairro'],
          'ID_LOGR_TIPO'        : value[i]['idTipoLogradouro'],
          'NOME_LOGR'           : value[i]['noLogradouro'],
          'CEP_LOGR'            : value[i]['cdCep'],
          'NUMERO_LOGR'         : value[i]['nrLogradouro'],
          'LOTEAMENTO_LOGR'     : value[i]['loteamento'],
          'COMPL_LOGR'          : value[i]['noComplLogradouro'],
          'PONTO_REFERENCIA'    : value[i]['pontoReferencia'],
          'ZONA_LOGR'           : value[i]['zona'],
          'DDD_TELEFONE'        : value[i]['nrDddTelefone'],
          'NUM_TELEFONE'        : value[i]['nrTelefone'],
          'DDD_CELULAR'         : value[i]['nrDddCelular'],
          'NUM_CELULAR'         : value[i]['nrCelular'],
          'DDD_RECADO'          : value[i]['nrDddRecado'],
          'NUM_RECADO'          : value[i]['nrRecado'],
          'EMAIL'               : value[i]['email'],
          'OBSERVACOES'         : value[i]['observacao'],
          'CPF'                 : value[i]['nrCpf'],
          'CNS'                 : value[i]['nrCns'],
          'TITULO_ELEITOR'      : value[i]['tituloEleitor'],
          'RG_NUMERO'           : value[i]['nrIdentidade'],
          'RG_COMPLEMENTO'      : value[i]['noComplIdentidade'],
          'RG_UF'               : value[i]['cdSiglaUfIdentidade'],
          'RG_ORGAO'            : value[i]['cdOrgaoEmissorIdentidade'],
          'RG_DATA_EMISSAO'     : value[i]['dtEmissaoIdentidade'],
          'TIPO_CERTIDAO'       : value[i]['cdTipoCertidao'],
          'NUM_CERTIDAO'        : value[i]['nrCertidaoNova'],
          'CARTORIO_CERTIDAO'   : value[i]['noCartorioCertidao'],
          'LIVRO_CERTIDAO'      : value[i]['nrLivroCertidao'],
          'FOLHA_CERTIDAO'      : value[i]['nrFolhaCertidao'],
          'TERMO_CERTIDAO'      : value[i]['noTermoCertidao'],
          'DT_EMISSAO_CERTIDAO' : value[i]['dtEmissaoCertidao'],
          'NUM_CTPS'            : value[i]['nrCtps'],
          'NUM_SERIE_CTPS'      : value[i]['nrSerieCtps'],
          'ESTADO_UF_CTPS'      : value[i]['cdSiglaUfCtps'],
          'NUM_PIS_PASEP'       : value[i]['nrPispasep'],
          'FL_RETIROU_CARTAO'   : value[i]['cartaoMunicipalRetirado'],
          'NUM_NIS'             : value[i]['nrNis'],
          'NUM_PROT_CROSS'      : '',
          'RENDA_MENSAL'        : value[i]['rendaMensal'],
          'PROFISSAO'           : value[i]['profissao'],
          'DT_OBITO'            : value[i]['dtObito'],
          'DECLARACAO_OBITO'    : '',
          'BLOQUEIO'            : value[i]['bloqueio'],
          'ORIGEM'              : value[i]['origem'],
          'DT_HORA_CADASTRO'    : value[i]['profissao'],
          'ID_USUARIO_CADASTRO' : value[i]['idUsuarioCadastro'],
          'ID_DOMICILIO'        : value[i]['cdDomicilio'],
          'ATENDIMENTOS'        : value[i]['atendimentos'],
          'RENDA_TOTAL_FAMILIAR': value[i]['rendaTotalFamiliar'],
          'POSSUI_VEICULO': value[i]['possuiVeiculo'],
          'MODELO_VEICULO': value[i]['modeloVeiculo'] ,
          'ANO_VEICULO': value[i]['anoVeiculo'],
          'POSSUI_FINANCIAMENTO': value[i]['possuiFinanciamento'] ,
          'VALOR_PARCELA_FINANCIAMENTO': value[i]['valorParcelaFinanciamento'] ,
          'POSSUI_EMPRESTIMO': value[i]['possuiEmprestimo'] ,
          'VALOR_PARCELA_EMPRESTIMO': value[i]['valorParcelaEmprestimo'],
          'SINCRONIZADO'        : '',
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('CIDADAOS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> CIDADAOS = await db.query('CIDADAOS');
      print('Total de CIDADAOS : ${CIDADAOS.length}');
    }else if(type=='new'){
      //testar depois ao incluir um novo cidadao se precisara do map data
      Map<String, dynamic> dataMap = value;
      int id = await db.insert('CIDADAOS', dataMap);
      // print('novo id $id');
    }else if(type=='update'){
      //testar depois ao incluir um novo cidadao se precisara do map data
      Map<String, dynamic> dataMap = value;
      await db.update('CIDADAOS', dataMap,where: "CD_USUARIO_SUS = '$CD_USUARIO_SUS'");
    }
    return db;
  }
  Future insertCadastrosDomiciliares(var value,String type,int ID_DOMICILIO,int ID_CIDADAO,String CD_USUARIO_SUS)async{

    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();

    if(type=='sync'){
      List list = value;
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_DOMICILIO': value[i]['cdDomicilio'],
          'TIPO_IMOVEL': value[i]['cdTipoImovel'],
          'ID_AREA_DOMICILIO': value[i]['cdAreaDomicilio'],
          'ID_MICROAREA_DOMICILIO': value[i]['cdMicroareaDomicilio'],
          'FORA_AREA': value[i]['foraArea'],
          'SITUACAO_MORADIA': value[i]['cdSituacao'],
          'TIPO_LOCALIDADE': value[i]['cdTipoLocalidade'],
          'TIPO_DOMICILIO': value[i]['cdTipoDomicilio'],
          'NUM_MORADORES': value[i]['nrMoradores'],
          'NUM_COMODOS': value[i]['nrComodo'],
          'SITUACAO_RURAL': value[i]['situacaoProducaoRural'],
          'TIPO_ACESSO': value[i]['tipoAcesso'],
          'MAT_PREDOMINANTE': value[i]['materialParedesExternas'],
          'DISPONIBILIDADE_ENERGIA': value[i]['dispEnergiaEletrica'],
          'TIPO_ABASTECIMENTO': value[i]['cdTipoAbastecimento'],
          'TRATAMENTO_AGUA': value[i]['cdTratamentoAgua'],
          'DESTINO_LIXO': value[i]['cdDestinoLixo'],
          'ESCOAMENTO': value[i]['cdEscoamento'],
          'FL_ANIMAIS': value[i]['animais'],
          'ANIMAIS_GATO': value[i]['animaisGato'],
          'ANIMAIS_CACHORRO': value[i]['animaisCachorro'],
          'ANIMAIS_PASSARO': value[i]['animaisPassaro'],
          'ANIMAIS_OUTROS': value[i]['animaisOutros'],
          'QTDE_ANIMAIS': value[i]['animaisQtde'],
          'CBO_RESP_CADASTRO': value[i]['cboRespCadastro'],
          'ID_RESP_CADASTRO': value[i]['respCadastro'],
          'CNES_RESP_CADASTRO': value[i]['cnesUnidade'],
          'INE_RESP_CADASTRO': value[i]['ine'],
          'DT_CADASTRO': value[i]['dtCadastro'],
          'ID_EQUIPE': value[i]['cdEquipe'],
          'ORIGEM': '',
          'SINCRONIZADO': '',
          'NOME_INSTITUICAO_PERMANENCIA': value[i]['noInstPermanencia'],
          'PROFISSIONAIS_VINCULADOS_INST': value[i]['outrosProfissionaisInst'],
          'RESPONSAVEL_TECNICO_INST': value[i]['noResponsavelInst'],
          'CARGO_RESP_TECNICO_INST': value[i]['gargoResponsavelInst'],
          'TEL_RESP_TECNICO_INST': value[i]['telefoneResponsavelInst'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('CIDADAO_DOMICILIO', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> CIDADAO_DOMICILIO = await db.query('CIDADAO_DOMICILIO');
      print('Total de CIDADAO_DOMICILIO : ${CIDADAO_DOMICILIO.length}');
    }else if(type=='new'){
      int id = await db.insert('CIDADAO_DOMICILIO', value);
      print('novo id $id');
      Map<String, dynamic> row = {
        'ID_DOMICILIO': id,
        'ORIGEM'      : 'A',
        'SINCRONIZADO': 'N'
      };
      await db.update('CIDADAOS', row,where: "ID_CIDADAO = $ID_CIDADAO");
      Map<String, dynamic> rowDom = {
        'ID_DOMICILIO': id,
        'CD_USUARIO_SUS': CD_USUARIO_SUS
      };
      await db.insert('DOMICILIOS_CIDADAOS', rowDom);
    }else if(type=='update'){
      await db.update('CIDADAO_DOMICILIO', value,where: "ID_DOMICILIO = '$ID_DOMICILIO'");
      Map<String, dynamic> row = {
        'ORIGEM'      : 'A',
        'SINCRONIZADO': 'N'
      };
      await db.update('CIDADAOS', row,where: "ID_CIDADAO = $ID_CIDADAO");
      Map<String, dynamic> rowDom = {
        'ID_DOMICILIO': ID_DOMICILIO,
        'CD_USUARIO_SUS': CD_USUARIO_SUS
      };
      await db.insert('DOMICILIOS_CIDADAOS', rowDom);
    }

    return db;
  }
  Future insertCadastrosIndividuais(var value,String type,int ID_CIDADAO)async{

    List<Map<String, dynamic>> rows = [];
    Database db = await DbSqliteLoad().intialDB();
    Batch batch = db.batch();

    if(type=='sync'){
      List list = value;
      for (int i = 0; i < list.length; i++) {
        Map<String, dynamic> row = {
          'ID_CAD_INDIVIDUAL': value[i]['idCadIndividual'],
          'STATUS_CADASTRO': value[i]['statusCadastro'],
          'ID_CIDADAO': value[i]['idCidadao'],
          'CD_USUARIO_SUS': value[i]['cdUsuarioSUS'],
          'ID_AREA_CIDADAO': value[i]['idAreaCidadao'],
          'ID_MICROAREA_CIDADAO': value[i]['idMicroAreaCidadao'],
          'FORA_AREA': value[i]['foraArea'],
          'RESPONSAVEL_FAMILIAR': value[i]['flResponsavelFamiliar'],
          'ID_RESPONSAVEL_FAMILIAR': value[i]['cdResponsavelFamiliar'],
          'NOME_RESPONSAVEL_FAMILIAR': value[i]['nomeResponsavelFamiliar'],
          'PARENTESCO': value[i]['parentesco'],
          'ESCOLARIDADE': value[i]['curso'],
          'FREQ_ESCOLA_CRECHE': value[i]['frequentaEscola'],
          'SITUACAO_MERCADO': value[i]['situacaoMercado'],
          'CUIDADOR_TRADICIONAL': value[i]['cuidadorTrad'],
          'GRUPO_COMUNITARIO': value[i]['grupoComunitario'],
          'PLANO_PRIVADO': value[i]['plSaudePrivado'],
          'COMUNIDADE_TRADICIONAL': value[i]['comunidadeTradicional'],
          'COM_TRADI_QUAL': value[i]['comunidadeTradicionalEspec'],
          'ORIENT_SEXUAL': value[i]['orientacaoSexual'],
          'TEM_DEFICIENCIA': value[i]['temDeficiencia'],
          'DEF_AUDITIVA': value[i]['defAuditiva'],
          'DEF_INTELECTUAL': value[i]['defIntelectual'],
          'DEF_VISUAL': value[i]['defVisual'],
          'DEF_FISICA': value[i]['defFisica'],
          'DEF_OUTRAS': value[i]['defOutros'],
          'SAIDA_CADASTRO': value[i]['saidaMotivo'],
          'DATA_SAIDA_CADASTRO': value[i]['saidaData'],
          'CADASTRO_RECUSADO': value[i]['recusado'],
          'GESTANTE': value[i]['gestante'],
          'MATERNIDADE_REFERENCIA': value[i]['maternidadeReferencia'],
          'PESO': value[i]['peso'],
          'FUMANTE': value[i]['fumante'],
          'USA_ALCOOL': value[i]['usaAlcool'],
          'USA_DROGAS': value[i]['outrasDrogas'],
          'HIPERTENSAO': value[i]['hipertensao'],
          'DIABETES': value[i]['diabetes'],
          'AVC_DERRAME': value[i]['avcDerrame'],
          'INFARTO': value[i]['infarto'],
          'HANSENIASE': value[i]['hanseniase'],
          'TUBERCULOSE': value[i]['tuberculose'],
          'CANCER': value[i]['cancer'],
          'INTERNACAO': value[i]['internacao12Meses'],
          'MOTIVO': value[i]['motivo'],
          'DOENCA_CARDIACA': value[i]['doencaCardiaca'],
          'PROBLEMA_RINS': value[i]['problemasRins'],
          'DOENCA_PULMAO': value[i]['doencaRespiratoriaPulmao'],
          'SAUDE_MENTAL': value[i]['tratamInternacaoPsiquiatrica'],
          'ACAMADO': value[i]['acamado'],
          'DOMICILIADO': value[i]['domiciliado'],
          'PLANTAS_MED': value[i]['plantasMedicinais'],
          'PLANTAS_MED_QUAIS': value[i]['plantasQuais'],
          'PIC': value[i]['praticasIntegrativasComplem'],
          'OUTRAS_CONDICOES': value[i]['outrasCondSaude'],
          'TEMPO_SITUACAO_RUA': value[i]['tempoSituacaoRua'],
          'ACOMP_INTITUICAO': value[i]['acompanhadoInstituicao'],
          'ACOMP_INTITUICAO_QUAL': value[i]['instituicaoQual'],
          'BENEFICIO': value[i]['recebeBeneficio'],
          'REF_FAMILIAR': value[i]['referenciaFamiliar'],
          'PARENTESCO_VISITA': value[i]['visitaFamiliarParentesco'],
          'ALIMENTACAO_DIARIA': value[i]['alimentacaoDiaria'],
          'REST_POPULAR': value[i]['alimentecaoRestaurantePop'],
          'DOACAO_REST': value[i]['alimentacaoDoacaoRestaurante'],
          'DOACAO_RELIGIOSO': value[i]['alimentacaoDoacaoGrupoRel'],
          'DOACAO_POPULAR': value[i]['alimentacaoDoacaoPop'],
          'OUTROS_ALIM': value[i]['alimentacaoOutros'],
          'ACESSO_HIGIENE': value[i]['higienePessoal'],
          'BANHO': value[i]['higieneBanho'],
          'SANITARIO': value[i]['higieneSanitario'],
          'HIGIENE_BUCAL': value[i]['higieneBucal'],
          'OUTROS_HIGIENE': value[i]['higieneOutros'],
          'FICHA_ALTERACAO': value[i]['fichaAlteracao'],
          'ID_RESP_CADASTRO': value[i]['idProfissionalResponsavel'],
          'CNES_RESP_CADASTRO': value[i]['cnesUnidade'],
          'CBO_RESP_CADASTRO': value[i]['cboProfissional'],
          'INE_RESP_CADASTRO': value[i]['ine'],
          'DT_CADASTRO': value[i]['dtCadastro'],
          'ID_EQUIPE': value[i]['cdEquipe'],
          'ORIGEM': '',
          'SINCRONIZADO': '',
          'DT_ENTRADA_BRASIL': value[i]['dtEntradaBrasil'],
          'DT_NATURALIZACAO': value[i]['dtNaturalizado'],
          'PORTARIA_NATURALIZACAO': value[i]['portariaNaturalizacao'],
          'CRIANCAS_ADULTO': value[i]['criancasAdulto'],
          'CRIANCAS_OUTRAS_CRIANCAS': value[i]['criancasOutrasCriancas'],
          'CRIANCAS_ADOLESCENTE': value[i]['criancasAdolescente'],
          'CRIANCAS_SOZINHA': value[i]['criancasSozinha'],
          'CRIANCAS_CRECHE': value[i]['criancasCresce'],
          'CRIANCAS_OUTRO': value[i]['criancasOutro'],
          'IDENTIDADE_GENERO': value[i]['identidadeGenero'],
          'FIBROMIALGIA': value[i]['fibromialgia'],
          'TRANSTORNO_ESPECTRO_AUTISTA': value[i]['transtornoEspectroAutista'],
        };
        rows.add(row);
      }
      rows.forEach((row) {
        batch.insert('CADASTROS_INDIVIDUAIS', row);
      });

      List<Object?> result = await batch.commit();
      print('Linhas inseridas: ${result.length}');

      List<Map<String, dynamic>> CADASTROS_INDIVIDUAIS = await db.query('CADASTROS_INDIVIDUAIS');
      print('Total de CADASTROS_INDIVIDUAIS : ${CADASTROS_INDIVIDUAIS.length}');
    }else if(type=='new'){
      Map<String, dynamic> dataMap = value;
      int id = await db.insert('CADASTROS_INDIVIDUAIS', dataMap);
      // print('novo id $id');
    }else if(type=='update'){
      Map<String, dynamic> dataMap = value;
      await db.update('CADASTROS_INDIVIDUAIS', dataMap ,where: "ID_CIDADAO = $ID_CIDADAO");
    }
    return db;
  }
  Future insertAtendimentoDomiciliar(var value)async{
    Database db = await DbSqliteLoad().intialDB();
    int id = await db.insert('ATENDIMENTOS_DOMICILIARES', value);
    // print(await db.query('ATENDIMENTOS_DOMICILIARES'));
    return id;
  }
  Future insertCondicoesAvaliadas(int ID_ATENDIMENTO_DOMICILIAR,int COND_AVAL_ATEND_DOM)async{
    Database db = await DbSqliteLoad().intialDB();
    // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER)
    Map<String,dynamic> row = {
      'ID_ATENDIMENTO_DOMICILIAR' :ID_ATENDIMENTO_DOMICILIAR,
      'COND_AVAL_ATEND_DOM'       :COND_AVAL_ATEND_DOM,
    };
    int id = await db.insert('ATENDS_DOM_COMPL', row);
    // print(await db.query('ATENDS_DOM_COMPL'));
    return db;
  }
  Future insertVisitaDomiciliar(var value)async{
    Database db = await DbSqliteLoad().intialDB();
    int id = await db.insert('VISITAS_DOMICILIARES', value);
    print(await db.query('VISITAS_DOMICILIARES'));
    return id;
  }
  Future insertVisitaDomiciliarCOMPL(int ID_VISITA_DOMICILIAR,int ID_VISITA_DOM_TIPO, int ID_VISITA_COMPLEMENTO)async{
    Database db = await DbSqliteLoad().intialDB();
    // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER)
    Map<String,dynamic> row = {
      'ID_VISITA_DOMICILIAR'  :ID_VISITA_DOMICILIAR,
      'ID_VISITA_DOM_TIPO'    :ID_VISITA_DOM_TIPO,
      'ID_VISITA_COMPLEMENTO' :ID_VISITA_COMPLEMENTO,
    };
    int id = await db.insert('VISITAS_DOMICILIARES_COMPL', row);
    print(await db.query('VISITAS_DOMICILIARES_COMPL'));
    return db;
  }
  Future insertProcedimentosDomiciliares(int ID_ATENDIMENTO_DOMICILIAR,int PROC_ATEND_DOM)async{
    Database db = await DbSqliteLoad().intialDB();
    // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER)
    Map<String,dynamic> row = {
      'ID_ATENDIMENTO_DOMICILIAR' :ID_ATENDIMENTO_DOMICILIAR,
      'PROC_ATEND_DOM'            :PROC_ATEND_DOM,
    };
    int id = await db.insert('ATENDS_DOM_PROC', row);
    print(await db.query('ATENDS_DOM_PROC'));
    return db;
  }
  Future insertVISITAS_DOMICILIARES_PROC(int ID_VISITA_DOMICILIAR,String COD_PROC_SIGTAP)async{
    Database db = await DbSqliteLoad().intialDB();
    // ATENDS_DOM_COMPL (ID_ATENDIMENTO_DOMICILIAR INTEGER, COND_AVAL_ATEND_DOM INTEGER)
    Map<String,dynamic> row = {
      'ID_VISITA_DOMICILIAR' :ID_VISITA_DOMICILIAR,
      'COD_PROC_SIGTAP'      :COD_PROC_SIGTAP,
    };
    int id = await db.insert('VISITAS_DOMICILIARES_PROC', row);
    print(await db.query('VISITAS_DOMICILIARES_PROC'));
    return db;
  }
  Future saveSync(codCity,codState,urlAPI,mode,nameCityApi,nameCityFront,codCityIbge,user,idUnidade,nomeUnidade,area,microarea)async{
    Database db = await DbSqliteLoad().intialDB();
    //refatorar cidade_load e nome_cidade
    'parameters = [{"carga_inicial": 1, "cidade_load": cidade, "nome_cidade": vm.nomeCidade[cidade], "cidade_id": cidadeID, "estado": estado, "ibge": ibge, "ambiente": ambiente, "competencia": competencia.replace(/\D/g, '')}]';
    "INSERT OR REPLACE INTO CONTROLE_INTERNO (rowid, CARGA_INICIAL, CIDADE_LOAD, NOME_CIDADE, ID_MUNICIPIO, UF_ESTADO, CODIGO_IBGE, AMBIENTE, COMPETENCIA) VALUES (1,?,?,?,?,?,?,?,?)";

    Map<String, dynamic> row = {
      'CARGA_INICIAL'        : 1,
      'CIDADE_LOAD'          : nameCityApi,
      'NOME_CIDADE'          : nameCityFront,
      'ID_MUNICIPIO'         : codCity,
      'UF_ESTADO'            : codState,
      'CODIGO_IBGE'          : codCityIbge,
      'AMBIENTE'             : mode,
      'SYNC_UNIDADE'         : idUnidade,
      'NOME_UNIDADE'         : nomeUnidade,
      'AREA'                 : area,
      'MICROAREA'            : microarea,
      'ULTIMA_SINCRONIZACAO' : DateTime.now().toString(),
      'COMPETENCIA'          : '${DateTime.now().year}${DateTime.now().month<10?'0':''}${DateTime.now().month-1}',
    };
    int id = await db.insert('CONTROLE_INTERNO', row);
    return db;
  }
}