import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:rkm/config/color_palette.dart';
import 'package:rkm/config/const_variable.dart';
import 'package:rkm/service/db/db_querys.dart';
import 'package:rkm/widgets/button_default.dart';
import 'package:rkm/widgets/title_containers.dart';
import '../../service/db/db_sqlite_sync.dart';
import '../../service/shared_preferences/shared_preferences_service.dart';
import '../../widgets/alert_dialog_default.dart';
import '../../widgets/appbar_default.dart';
import '../../widgets/dropdown_with_subtitle.dart';
import '../../widgets/error_default.dart';
import '../../widgets/input_with_subtitle.dart';
import '../../widgets/onbackbutton.dart';
import '../../widgets/subtitle_appbar_citizen.dart';
import '../../widgets/switch_with_subtitle.dart';
import '../../widgets/text_default.dart';
class RegisterHomeScreen extends StatefulWidget {
  List listData;
  RegisterHomeScreen({required this.listData});

  @override
  State<RegisterHomeScreen> createState() => _RegisterHomeScreenState();
}

class _RegisterHomeScreenState extends State<RegisterHomeScreen> {

  var QTDE_ANIMAIS = TextEditingController();
  var NUM_COMODOS = TextEditingController();
  var NUM_MORADORES = TextEditingController();
  var NOME_RESP_CADASTRO = TextEditingController();
  var CNES_RESP_CADASTRO = TextEditingController();
  var DT_CADASTRO = TextEditingController();

  bool FORA_AREA = false;
  bool DISPONIBILIDADE_ENERGIA = false;
  bool FL_ANIMAIS = false;
  bool ANIMAIS_GATO = false;
  bool ANIMAIS_CACHORRO = false;
  bool ANIMAIS_PASSARO = false;
  bool ANIMAIS_OUTROS = false;
  bool edit = false;
  bool editing = false;
  bool mandatory = false;
  bool CNS_VALIDO = false;
  bool showCheckError = false;

  List<String> listTypeHome = [];
  List<String> listINE = [];
  List<String> listSituationHome = [];
  List<String> listTypeLocation = [];
  List<String> listTypeResidence = [];
  List<String> listSituationRural = [];
  List<String> listTypeAcessHome = [];
  List<String> listMaterialHome = [];
  List<String> listWaterHome = [];
  List<String> listWaterTreatment = [];
  List<String> listDestinyTrash = [];
  List<String> listSanitary = [];
  List<String> listCBO = [];
  List<String> listINEPROF = [];

  String idUsuario = '';
  String idUnidade = '';
  String nomeUnidade = '';
  String INE_DB='';
  String? INE;
  String? TIPO_IMOVEL;
  String? SITUACAO_MORADIA;
  String? TIPO_LOCALIDADE;
  String? TIPO_DOMICILIO;
  String? SITUACAO_RURAL;
  String? TIPO_ACESSO;
  String? MAT_PREDOMINANTE;
  String? TIPO_ABASTECIMENTO;
  String? TRATAMENTO_AGUA;
  String? DESTINO_LIXO;
  String? ESCOAMENTO;
  String? CBO_RESP_CADASTRO;
  String? INE_RESP_CADASTRO;
  String? NOME_INSTITUICAO_PERMANENCIA;
  String? PROFISSIONAIS_VINCULADOS_INST;
  String? RESPONSAVEL_TECNICO_INST;
  String? CARGO_RESP_TECNICO_INST;
  String? TEL_RESP_TECNICO_INST;
  String CD_USUARIO_SUS = '';
  int ID_CIDADAO=0;
  String date_cad = '';
  String TIPO_SALVAR = 'new';

  int ID_RESP_CADASTRO=0;
  int ID_DOMICILIO=0;
  int ID_AREA_DOMICILIO=0;
  int ID_MICROAREA_DOMICILIO=0;
  int TIPO_IMOVEL_COD = 0;
  int SITUACAO_MORADIA_COD = 0;
  int TIPO_LOCALIDADE_COD = 0;
  int TIPO_DOMICILIO_COD = 0;
  int SITUACAO_RURAL_COD = 0;
  int TIPO_ACESSO_COD = 0;
  int MAT_PREDOMINANTE_COD = 0;
  int TIPO_ABASTECIMENTO_COD = 0;
  int TRATAMENTO_AGUA_COD = 0;
  int DESTINO_LIXO_COD = 0;
  int ESCOAMENTO_COD = 0;
  int ID_EQUIPE = 0;

  escolherprazoInicio(BuildContext context) async {
    var pickDate = await showDatePicker(
        context: context,
        initialDate: DateTime.now(),
        firstDate: DateTime(2022),
        lastDate: DateTime(2025));
    if (pickDate != null) {
      setState(() {
        date_cad = '${pickDate.year}-${pickDate.month<10?'0':''}${pickDate.month}-${pickDate.day<10?'0':''}${pickDate.day}';
        DT_CADASTRO.text = formatData(year: pickDate.year, month: pickDate.month, day: pickDate.day);
      });
    }
  }

  String formatData({int? year, int? month, int? day}) {
    DateTime data = DateTime(year!, month!, day!);
    String formattedDate = DateFormat('dd/MM/yyyy').format(data);
    return formattedDate;
  }

  getUser(){
    final PrefService _prefService = PrefService();
    _prefService.readCacheIdUsuario('idUsuario').then((value){
      if(value != null){
        idUsuario = value;
      }
    });
    _prefService.readCacheUnidade('idUnidade').then((value){
      if(value!=null){
        idUnidade = value[0];
        nomeUnidade = value[1];
      }
      loadLists();
    });
  }

  loadLists(){
    for(int i = 0; ConstVariable().listTypeHome.length > i; i++){
      listTypeHome.add(ConstVariable().listTypeHome[i].title);
    }
    for(int i = 0; ConstVariable().listSituationHome.length > i; i++){
      listSituationHome.add(ConstVariable().listSituationHome[i].title);
    }
    for(int i = 0; ConstVariable().listTypeLocation.length > i; i++){
      listTypeLocation.add(ConstVariable().listTypeLocation[i].title);
    }
    for(int i = 0; ConstVariable().listTypeResidence.length > i; i++){
      listTypeResidence.add(ConstVariable().listTypeResidence[i].title);
    }
    for(int i = 0; ConstVariable().listSituationRural.length > i; i++){
      listSituationRural.add(ConstVariable().listSituationRural[i].title);
    }
    for(int i = 0; ConstVariable().listTypeAcessHome.length > i; i++){
      listTypeAcessHome.add(ConstVariable().listTypeAcessHome[i].title);
    }
    for(int i = 0; ConstVariable().listMaterialHome.length > i; i++){
      listMaterialHome.add(ConstVariable().listMaterialHome[i].title);
    }
    for(int i = 0; ConstVariable().listWaterHome.length > i; i++){
      listWaterHome.add(ConstVariable().listWaterHome[i].title);
    }
    for(int i = 0; ConstVariable().listWaterTreatment.length > i; i++){
      listWaterTreatment.add(ConstVariable().listWaterTreatment[i].title);
    }
    for(int i = 0; ConstVariable().listDestinyTrash.length > i; i++){
      listDestinyTrash.add(ConstVariable().listDestinyTrash[i].title);
    }
    for(int i = 0; ConstVariable().listSanitary.length > i; i++){
      listSanitary.add(ConstVariable().listSanitary[i].title);
    }
    loadRegisterHome();
  }

  loadRegisterHome()async{
    ID_DOMICILIO = widget.listData[0]['ID_DOMICILIO'];
    ID_CIDADAO = widget.listData[0]['ID_CIDADAO'];
    CD_USUARIO_SUS = widget.listData[0]['CD_USUARIO_SUS'];
    DBQuerys().buscaCadDomiciliar(ID_DOMICILIO).then((dataHome)async{
      TIPO_IMOVEL_COD = dataHome[0]['TIPO_IMOVEL']??0;
      if(dataHome.length!=0){
        TIPO_SALVAR = 'update';
      }
      for (int i = 0; ConstVariable().listTypeHome.length > i; i++) {
        if (ConstVariable().listTypeHome[i].cod == TIPO_IMOVEL_COD) {
          TIPO_IMOVEL = ConstVariable().listTypeHome[i].title;
        }
      }
      List list = await DBQuerys().buscaDadosProfissional(idUnidade,idUsuario);
      ID_AREA_DOMICILIO = list[0]['AREA'];
      ID_MICROAREA_DOMICILIO = list[0]['MICROAREA'];
      INE_DB = list[0]['INE'];
      INE = 'INE: $INE_DB / Área: $ID_AREA_DOMICILIO - Microárea : $ID_MICROAREA_DOMICILIO';
      listINE.add(INE!);
      FORA_AREA = dataHome[0]['FORA_AREA']==1?true:false;
      SITUACAO_MORADIA_COD = dataHome[0]['SITUACAO_MORADIA']??0;
      for (int i = 0; ConstVariable().listSituationHome.length > i; i++) {
        if (ConstVariable().listSituationHome[i].cod == SITUACAO_MORADIA_COD) {
          SITUACAO_MORADIA = ConstVariable().listSituationHome[i].title;
        }
      }
      TIPO_LOCALIDADE_COD = dataHome[0]['TIPO_LOCALIDADE']??0;
      for (int i = 0; ConstVariable().listTypeLocation.length > i; i++) {
        if (ConstVariable().listTypeLocation[i].cod == TIPO_LOCALIDADE_COD) {
          TIPO_LOCALIDADE = ConstVariable().listTypeLocation[i].title;
        }
      }
      TIPO_DOMICILIO_COD = dataHome[0]['TIPO_DOMICILIO']??0;
      for (int i = 0; ConstVariable().listTypeResidence.length > i; i++) {
        if (ConstVariable().listTypeResidence[i].cod == TIPO_DOMICILIO_COD) {
          TIPO_DOMICILIO = ConstVariable().listTypeResidence[i].title;
        }
      }
      NUM_MORADORES.text = dataHome[0]['NUM_MORADORES'].toString()=='null'?'':dataHome[0]['NUM_MORADORES'].toString();
      NUM_COMODOS.text = dataHome[0]['NUM_COMODOS'].toString()=='null'?'':dataHome[0]['NUM_COMODOS'].toString();
      SITUACAO_RURAL_COD = dataHome[0]['SITUACAO_RURAL']??0;
      for (int i = 0; ConstVariable().listSituationRural.length > i; i++) {
        if (ConstVariable().listSituationRural[i].cod == SITUACAO_RURAL_COD) {
          SITUACAO_RURAL = ConstVariable().listSituationRural[i].title;
        }
      }
      TIPO_ACESSO_COD = dataHome[0]['TIPO_ACESSO']??0;
      for (int i = 0; ConstVariable().listTypeAcessHome.length > i; i++) {
        if (ConstVariable().listTypeAcessHome[i].cod == TIPO_ACESSO_COD) {
          TIPO_ACESSO = ConstVariable().listTypeAcessHome[i].title;
        }
      }
      MAT_PREDOMINANTE_COD = dataHome[0]['MAT_PREDOMINANTE']??0;
      for (int i = 0; ConstVariable().listMaterialHome.length > i; i++) {
        if (ConstVariable().listMaterialHome[i].cod == MAT_PREDOMINANTE_COD) {
          MAT_PREDOMINANTE = ConstVariable().listMaterialHome[i].title;
        }
      }
      DISPONIBILIDADE_ENERGIA = dataHome[0]['DISPONIBILIDADE_ENERGIA']==1?true:false;
      TIPO_ABASTECIMENTO_COD = dataHome[0]['TIPO_ABASTECIMENTO']??0;
      for (int i = 0; ConstVariable().listWaterHome.length > i; i++) {
        if (ConstVariable().listWaterHome[i].cod == TIPO_ACESSO_COD) {
          TIPO_ABASTECIMENTO = ConstVariable().listWaterHome[i].title;
        }
      }
      TRATAMENTO_AGUA_COD = dataHome[0]['TRATAMENTO_AGUA']??0;
      for (int i = 0; ConstVariable().listWaterHome.length > i; i++) {
        if (ConstVariable().listWaterTreatment[i].cod == TRATAMENTO_AGUA_COD) {
          TRATAMENTO_AGUA = ConstVariable().listWaterTreatment[i].title;
        }
      }
      DESTINO_LIXO_COD = dataHome[0]['DESTINO_LIXO']??0;
      for (int i = 0; ConstVariable().listDestinyTrash.length > i; i++) {
        if (ConstVariable().listDestinyTrash[i].cod == DESTINO_LIXO_COD) {
          DESTINO_LIXO = ConstVariable().listDestinyTrash[i].title;
        }
      }
      ESCOAMENTO_COD = dataHome[0]['ESCOAMENTO']??0;
      for (int i = 0; ConstVariable().listSanitary.length > i; i++) {
        if (ConstVariable().listSanitary[i].cod == ESCOAMENTO_COD) {
          ESCOAMENTO = ConstVariable().listSanitary[i].title;
        }
      }
      FL_ANIMAIS = dataHome[0]['FL_ANIMAIS']==1?true:false;
      ANIMAIS_GATO = dataHome[0]['ANIMAIS_GATO']==1?true:false;
      ANIMAIS_CACHORRO = dataHome[0]['ANIMAIS_CACHORRO']==1?true:false;
      ANIMAIS_PASSARO = dataHome[0]['ANIMAIS_PASSARO']==1?true:false;
      QTDE_ANIMAIS.text = dataHome[0]['QTDE_ANIMAIS']==null?'':dataHome[0]['QTDE_ANIMAIS'].toString();
      date_cad = dataHome[0]['DT_CADASTRO']??'';
      List splitted = date_cad.toString().split('-');
      DT_CADASTRO.text = splitted.length<2?'':'${splitted[2]}/${splitted[1]}/${splitted[0]}';
      ID_EQUIPE = dataHome[0]['ID_EQUIPE']??0;
      NOME_INSTITUICAO_PERMANENCIA = dataHome[0]['NOME_INSTITUICAO_PERMANENCIA'];
      PROFISSIONAIS_VINCULADOS_INST = dataHome[0]['PROFISSIONAIS_VINCULADOS_INST'];
      RESPONSAVEL_TECNICO_INST = dataHome[0]['RESPONSAVEL_TECNICO_INST'];
      CARGO_RESP_TECNICO_INST = dataHome[0]['CARGO_RESP_TECNICO_INST'];
      TEL_RESP_TECNICO_INST = dataHome[0]['TEL_RESP_TECNICO_INST'];
      await DBQuerys().buscaCBOProfissional(idUsuario).then((list){
        if(list.length!=0){
          for(int i = 0; list.length>i;i++){
            listCBO.add(list[i]['CODIGO_CBO'].toString());
          }
        }
        CBO_RESP_CADASTRO = list.length == 0?null:list[0]['CODIGO_CBO'].toString();
        setState(() {});
      });
    });
    List list = await DBQuerys().buscaDadosProfissional(idUnidade,idUsuario);
    for(int i=0; list.length > i;i++){
      INE_RESP_CADASTRO = 'INE: ${list[i]['INE']} / Área: ${list[i]['AREA']} - Microárea : ${list[i]['MICROAREA']}';
      listINEPROF.add('INE: ${list[i]['INE']} / Área: ${list[i]['AREA']} - Microárea : ${list[i]['MICROAREA']}');
    }
    await DBQuerys().buscaProfissionalCadInd(idUsuario).then((list){
      ID_RESP_CADASTRO = list['ID_PROFISSIONAL'];
      NOME_RESP_CADASTRO.text = list['NOME_PROFISSIONAL'];
      String CNS_PROFISSIONAL = list['CNS_PROFISSIONAL'];
      if(CNS_PROFISSIONAL == 999999999999999 || CNS_PROFISSIONAL == '999999999999999'){
        CNS_VALIDO = true;
      }
    });
    setState(() {});
  }

  checkSave()async{
    // adicionar depois e usar um usuário real
    // CBO_RESP_CADASTRO
    //ok
    if(TIPO_IMOVEL==null || DT_CADASTRO.text.isEmpty ){
      print('erro');
      setState(() {
        showCheckError = true;
        mandatory = true;
      });
    }else{
      print('passou');
      mandatory = false;
      showCheckError = false;
      setState(() {});
      saveCitizenHome();
    }
  }

  saveCitizenHome()async{
    Map<String, dynamic> row = {
      'TIPO_IMOVEL'                 : TIPO_IMOVEL_COD,
      'ID_AREA_DOMICILIO'           : ID_AREA_DOMICILIO,
      'ID_MICROAREA_DOMICILIO'      : ID_MICROAREA_DOMICILIO,
      'FORA_AREA'                   : FORA_AREA?1:2,
      'SITUACAO_MORADIA'            : SITUACAO_MORADIA_COD,
      'TIPO_LOCALIDADE'             : TIPO_LOCALIDADE_COD,
      'TIPO_DOMICILIO'              : TIPO_DOMICILIO_COD,
      'NUM_MORADORES'               : int.parse(NUM_MORADORES.text),
      'NUM_COMODOS'                 : int.parse(NUM_COMODOS.text),
      'SITUACAO_RURAL'              : SITUACAO_RURAL_COD,
      'TIPO_ACESSO'                 : TIPO_ACESSO_COD,
      'MAT_PREDOMINANTE'            : MAT_PREDOMINANTE_COD,
      'DISPONIBILIDADE_ENERGIA'     : DISPONIBILIDADE_ENERGIA?1:2,
      'TIPO_ABASTECIMENTO'          : TIPO_ABASTECIMENTO_COD,
      'TRATAMENTO_AGUA'             : TRATAMENTO_AGUA_COD,
      'DESTINO_LIXO'                : DESTINO_LIXO_COD,
      'ESCOAMENTO'                  : ESCOAMENTO_COD,
      'FL_ANIMAIS'                  : FL_ANIMAIS?1:2,
      'ANIMAIS_GATO'                : ANIMAIS_GATO?1:2,
      'ANIMAIS_CACHORRO'            : ANIMAIS_CACHORRO?1:2,
      'ANIMAIS_PASSARO'             : ANIMAIS_PASSARO?1:2,
      'ANIMAIS_OUTROS'              : ANIMAIS_OUTROS?1:2,
      'QTDE_ANIMAIS'                : QTDE_ANIMAIS.text.isEmpty?0:int.parse(QTDE_ANIMAIS.text),
      'CBO_RESP_CADASTRO'           : CBO_RESP_CADASTRO,
      'ID_RESP_CADASTRO'            : ID_RESP_CADASTRO,
      'CNES_RESP_CADASTRO'          : CNES_RESP_CADASTRO.text,
      'INE_RESP_CADASTRO'           : INE,
      'DT_CADASTRO'                 : date_cad,
      'ID_EQUIPE'                   : ID_EQUIPE,
      'ORIGEM'                      : 'A',
      'SINCRONIZADO'                : 'N',
      'NOME_INSTITUICAO_PERMANENCIA': NOME_INSTITUICAO_PERMANENCIA,
      'PROFISSIONAIS_VINCULADOS_INST': PROFISSIONAIS_VINCULADOS_INST,
      'RESPONSAVEL_TECNICO_INST'     : RESPONSAVEL_TECNICO_INST,
      'CARGO_RESP_TECNICO_INST'      : CARGO_RESP_TECNICO_INST,
      'TEL_RESP_TECNICO_INST'        : TEL_RESP_TECNICO_INST,
    };
    await DbSqliteSync().insertCadastrosDomiciliares(row,TIPO_SALVAR,ID_DOMICILIO,ID_CIDADAO,CD_USUARIO_SUS,0).then((value){
      AlertDialogDefault().alert(
          context,
          'Aviso',
          TIPO_SALVAR!='new'?
          'Cadastro Domiciliar alterado com sucesso!':
          'Cadastro Domiciliar realizado com sucesso!',
          'OK'
      );
      // print(value);
    });
  }

  @override
  void initState() {
    super.initState();
    getUser();
  }

  @override
  Widget build(BuildContext context) {

    double heigth = MediaQuery.of(context).size.height;
    double width = MediaQuery.of(context).size.width;

    return WillPopScope(
      onWillPop: ()async => await OnBackButton().onBackButton(context),
      child: Scaffold(
        appBar: AppBarDefault().appbar(context, 'RKM AB - Cadastro Domiciliar'),
        body: Container(
            height: double.infinity,
            width: double.infinity,
            decoration: ConstVariable().backgroundGradient,
            child: ListView(
                children: [
                  SubtitleAppbarCitizen(title: 3,edit: true,listData: widget.listData),
                  showCheckError?Card(
                    margin: EdgeInsets.all(10),
                    child: Container(
                      padding: EdgeInsets.all(10),
                      child: Row(
                        children: [
                          Icon(Icons.warning,color: Colors.red,),
                          TextDefault(text: 'Existem campos obrigatórios não preenchidos.',color: ColorPalette.red,fontSize: 15,)
                        ],
                      ),
                    ),
                    color: ColorPalette.white,
                  ):Container(),
                  Card(
                    margin: EdgeInsets.all(10),
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(
                        children: [
                          !edit?ButtonDefault(
                            onPressed: (){
                              setState(() {
                                edit = true;
                                editing = true;
                              });
                            },
                            title: 'Alterar',
                            borderColor: ColorPalette.edit,
                            background: ColorPalette.edit,
                            textColor: ColorPalette.white,
                            width: double.infinity,
                          ):ButtonDefault(
                              onPressed: ()=>checkSave(),
                              title: 'Salvar',
                              borderColor: ColorPalette.appBar,
                              background: ColorPalette.appBar,
                              textColor: ColorPalette.white,
                              width: double.infinity,
                          ),
                          ButtonDefault(
                            onPressed: ()=>Navigator.pop(context),
                            title: 'Cancelar',
                            borderColor: ColorPalette.blackButton,
                            background: ColorPalette.blackButton,
                            textColor: ColorPalette.white,
                            width: double.infinity,
                          )
                        ],
                      ),
                    ),
                  ),
                  Card(
                    margin: EdgeInsets.all(10),
                    child: Column(
                      children: [
                        TitleContainers(title: 'Condições de Moradia'),
                        Row(
                          children: [
                            Container(
                              height: heigth*0.5,
                              width: width*0.2,
                              child: Icon(Icons.home,size: 80,),
                            ),
                            Column(
                              mainAxisAlignment: MainAxisAlignment.start,
                              mainAxisSize: MainAxisSize.min,
                              children: [
                                DropdownWithSubtitle(
                                  list:listTypeHome,
                                  widthSubtitle: width*0.7,
                                  subtitle: 'Tipo de Imóvel',
                                  hintDropdown: 'Tipo de Imóvel',
                                  select: TIPO_IMOVEL,
                                  widthDropdown:  width*0.7,
                                  widthContainerDropdown: width*0.6,
                                  onChanged:!editing?null: (value){
                                    setState(()=>TIPO_IMOVEL = value!);
                                    for (int i = 0; ConstVariable().listTypeHome.length > i; i++) {
                                      if (ConstVariable().listTypeHome[i].title == TIPO_IMOVEL) {
                                        TIPO_IMOVEL_COD = ConstVariable().listTypeHome[i].cod;
                                      }
                                    }
                                  },
                                ),
                                TIPO_IMOVEL==null&& mandatory?ErrorDefault():Container(),
                                DropdownWithSubtitle(
                                  list:listINE,
                                  widthSubtitle: width*0.7,
                                  subtitle: 'INE - Área / Microárea do Domicílio',
                                  hintDropdown:  'INE - Área / Microárea do Domicílio',
                                  select: INE,
                                  widthDropdown:  width*0.7,
                                  widthContainerDropdown: width*0.6,
                                  onChanged: !editing?null: (value)=>setState(()=>INE = value!),
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Fora de área',
                                  value: FORA_AREA,
                                  onChanged: !editing?null: (value){
                                    if(value){
                                      INE = null;
                                    }
                                    setState(()=>FORA_AREA=value);
                                  },
                                ),
                                DropdownWithSubtitle(
                                  list:listSituationHome,
                                  widthSubtitle: width*0.7,
                                  subtitle: 'Situação',
                                  hintDropdown:  'Situação',
                                  select: SITUACAO_MORADIA,
                                  widthDropdown:  width*0.7,
                                  widthContainerDropdown: width*0.6,
                                  onChanged:!editing?null: (value){
                                    setState(()=>SITUACAO_MORADIA = value!);
                                    for (int i = 0; ConstVariable().listSituationHome.length > i; i++) {
                                      if (ConstVariable().listSituationHome[i].title == TIPO_IMOVEL) {
                                        SITUACAO_MORADIA_COD = ConstVariable().listSituationHome[i].cod;
                                      }
                                    }
                                  },
                                ),
                                DropdownWithSubtitle(
                                  list:listTypeLocation,
                                  widthSubtitle: width*0.7,
                                  subtitle: 'Localização',
                                  hintDropdown:  'Localização',
                                  select: TIPO_LOCALIDADE,
                                  widthDropdown:  width*0.7,
                                  widthContainerDropdown: width*0.6,
                                  onChanged:!editing?null: (value){
                                    setState(()=>TIPO_LOCALIDADE = value!);
                                    for (int i = 0; ConstVariable().listTypeLocation.length > i; i++) {
                                      if (ConstVariable().listTypeLocation[i].title == TIPO_LOCALIDADE) {
                                        TIPO_LOCALIDADE_COD = ConstVariable().listTypeLocation[i].cod;
                                      }
                                    }
                                  },
                                ),
                                DropdownWithSubtitle(
                                  list:listTypeResidence,
                                  widthSubtitle: width*0.7,
                                  subtitle: 'Tipo de Domicílio',
                                  hintDropdown:  'Tipo de Domicílio',
                                  select: TIPO_DOMICILIO,
                                  widthDropdown:  width*0.7,
                                  widthContainerDropdown: width*0.6,
                                  onChanged:!editing?null: (value){
                                    setState(()=>TIPO_DOMICILIO = value!);
                                    for (int i = 0; ConstVariable().listTypeResidence.length > i; i++) {
                                      if (ConstVariable().listTypeResidence[i].title == TIPO_DOMICILIO) {
                                        TIPO_DOMICILIO_COD = ConstVariable().listTypeResidence[i].cod;
                                      }
                                    }
                                  },
                                ),
                                InputWithSubtitle(
                                  subtitle: 'Moradores',
                                  hintInput: 'Moradores',
                                  errorInput: 'Campo obrigatório',
                                  labelInput: 'Moradores',
                                  widthSubtitle: width*0.4,
                                  widthInput: width*0.7,
                                  controller: NUM_MORADORES,
                                  mandatory: false,
                                  enabled: editing,
                                  onChanged: (v)=>setState((){}),
                                ),
                                InputWithSubtitle(
                                  subtitle: 'Cômodos',
                                  hintInput: 'Cômodos',
                                  errorInput: 'Campo obrigatório',
                                  labelInput: 'Cômodos',
                                  widthSubtitle: width*0.4,
                                  widthInput: width*0.7,
                                  controller: NUM_COMODOS,
                                  mandatory: false,
                                  enabled: editing,
                                  onChanged: (v)=>setState((){}),
                                ),
                                DropdownWithSubtitle(
                                    list:listSituationRural,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Situação Rural',
                                    hintDropdown:  'Situação Rural',
                                    select: SITUACAO_RURAL,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged:!editing?null: (value){
                                      setState(()=>SITUACAO_RURAL = value!);
                                      for (int i = 0; ConstVariable().listSituationRural.length > i; i++) {
                                        if (ConstVariable().listSituationRural[i].title == SITUACAO_RURAL) {
                                          SITUACAO_RURAL_COD = ConstVariable().listSituationRural[i].cod;
                                        }
                                      }
                                    },
                                ),
                                DropdownWithSubtitle(
                                    list:listTypeAcessHome,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Tipo de Acesso ao Domicílio',
                                    hintDropdown:  'Tipo de Acesso ao Domicílio',
                                    select: TIPO_ACESSO,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged: !editing?null: (value){
                                      setState(()=>TIPO_ACESSO = value!);
                                      for (int i = 0; ConstVariable().listTypeAcessHome.length > i; i++) {
                                        if (ConstVariable().listTypeAcessHome[i].title == TIPO_ACESSO) {
                                          TIPO_ACESSO_COD = ConstVariable().listTypeAcessHome[i].cod;
                                        }
                                      }
                                    },
                                ),
                                DropdownWithSubtitle(
                                    list:listMaterialHome,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Material Predominante - Parede',
                                    hintDropdown: 'Material Predominante - Parede',
                                    select: MAT_PREDOMINANTE,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged: !editing?null: (value){
                                      setState(()=>MAT_PREDOMINANTE = value!);
                                      for (int i = 0; ConstVariable().listMaterialHome.length > i; i++) {
                                        if (ConstVariable().listMaterialHome[i].title == MAT_PREDOMINANTE) {
                                          MAT_PREDOMINANTE_COD = ConstVariable().listMaterialHome[i].cod;
                                        }
                                      }
                                    },
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Disponibilidade de Energia Elétroca',
                                  value: DISPONIBILIDADE_ENERGIA,
                                  onChanged:!editing?null: (value)=>setState(()=>DISPONIBILIDADE_ENERGIA = value),
                                ),
                                DropdownWithSubtitle(
                                    list:listWaterHome,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Abastecimento de Água',
                                    hintDropdown: 'Abastecimento de Água',
                                    select: TIPO_ABASTECIMENTO,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged: !editing?null:(value){
                                      setState(()=>TIPO_ABASTECIMENTO = value!);
                                      for (int i = 0; ConstVariable().listWaterHome.length > i; i++) {
                                        if (ConstVariable().listWaterHome[i].title == TIPO_ABASTECIMENTO) {
                                          TIPO_ABASTECIMENTO_COD = ConstVariable().listWaterHome[i].cod;
                                        }
                                      }
                                    },
                                ),
                                DropdownWithSubtitle(
                                    list:listWaterTreatment,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Tratamento de Água',
                                    hintDropdown: 'Tratamento de Água',
                                    select: TRATAMENTO_AGUA,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged:!editing?null: (value){
                                      setState(()=>TRATAMENTO_AGUA = value!);
                                      for (int i = 0; ConstVariable().listWaterTreatment.length > i; i++) {
                                        if (ConstVariable().listWaterTreatment[i].title == TRATAMENTO_AGUA) {
                                          TRATAMENTO_AGUA_COD = ConstVariable().listWaterTreatment[i].cod;
                                        }
                                      }
                                    },
                                ),
                                DropdownWithSubtitle(
                                    list:listDestinyTrash,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Destino de Lixo',
                                    hintDropdown: 'Destino de Lixo',
                                    select: DESTINO_LIXO,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged:!editing?null: (value){
                                      setState(()=>DESTINO_LIXO = value!);
                                      for (int i = 0; ConstVariable().listDestinyTrash.length > i; i++) {
                                        if (ConstVariable().listDestinyTrash[i].title == DESTINO_LIXO) {
                                          DESTINO_LIXO_COD = ConstVariable().listDestinyTrash[i].cod;
                                        }
                                      }
                                    },
                                ),
                                DropdownWithSubtitle(
                                    list:listSanitary,
                                    widthSubtitle: width*0.7,
                                    subtitle: 'Forma de Escoamento Sanitário',
                                    hintDropdown: 'Forma de Escoamento Sanitário',
                                    select: ESCOAMENTO,
                                    widthDropdown:  width*0.7,
                                    widthContainerDropdown: width*0.6,
                                    onChanged:!editing?null: (value){
                                      setState(()=>ESCOAMENTO = value!);
                                      for (int i = 0; ConstVariable().listSanitary.length > i; i++) {
                                        if (ConstVariable().listSanitary[i].title == ESCOAMENTO) {
                                          ESCOAMENTO_COD = ConstVariable().listSanitary[i].cod;
                                        }
                                      }
                                  },
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Animais',
                                  value: FL_ANIMAIS,
                                  onChanged: !editing?null: (value)=>setState(()=>FL_ANIMAIS = value!),
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Quais - Gato',
                                  value: ANIMAIS_GATO,
                                  onChanged: !editing || !FL_ANIMAIS?null: (value)=>setState(()=>ANIMAIS_GATO = value!),
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Quais - Cachorro',
                                  value: ANIMAIS_CACHORRO,
                                  onChanged:!editing || !FL_ANIMAIS?null: (value)=>setState(()=>ANIMAIS_CACHORRO = value!),
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Quais - Pássaro',
                                  value: ANIMAIS_PASSARO,
                                  onChanged: !editing || !FL_ANIMAIS?null: (value)=>setState(()=>ANIMAIS_PASSARO = value!),
                                ),
                                SwitchWithSubtitle(
                                  width: width*0.7,
                                  title: 'Quais - Outros',
                                  value: ANIMAIS_OUTROS,
                                  onChanged: !editing || !FL_ANIMAIS?null: (value)=>setState(()=>ANIMAIS_OUTROS = value!),
                                ),
                                InputWithSubtitle(
                                  subtitle: 'Quantidade',
                                  hintInput: 'Quantidade',
                                  errorInput: 'Campo obrigatório',
                                  labelInput: 'Quantidade',
                                  widthSubtitle: width*0.4,
                                  widthInput: width*0.7,
                                  controller: QTDE_ANIMAIS,
                                  mandatory: false,
                                  enabled: editing && FL_ANIMAIS,
                                  onChanged: (v)=>setState((){}),
                                ),
                              ],
                            )
                          ],
                        )
                      ],
                    ),
                  ),
                  Card(
                    margin: EdgeInsets.all(10),
                    child: Column(
                      children: [
                        TitleContainers(title: 'Outros'),
                        Row(
                            children: [
                              Container(
                                height: heigth*0.4,
                                width: width*0.2,
                                child: Icon(Icons.business_center,size: 80,),
                              ),
                              Padding(
                                padding: const EdgeInsets.symmetric(horizontal: 0.0),
                                child: Column(
                                  mainAxisAlignment: MainAxisAlignment.start,
                                  mainAxisSize: MainAxisSize.min,
                                  children: [
                                    InputWithSubtitle(
                                      controller: NOME_RESP_CADASTRO,
                                      subtitle: 'Usuário responsável Pelo Cadastro',
                                      errorInput: 'Campo Obrigatório',
                                      labelInput: 'Usuário responsável Pelo Cadastro',
                                      widthInput: width*0.7,
                                      widthSubtitle: width*0.7,
                                      hintInput: 'Escreva aqui',
                                      enabled: false,
                                      onChanged: (v)=>setState((){}),
                                    ),
                                    InputWithSubtitle(
                                      controller: CNES_RESP_CADASTRO,
                                      subtitle: 'Unidade do Profissional',
                                      errorInput: 'Campo Obrigatório',
                                      labelInput: 'Unidade do Profissional',
                                      widthInput: width*0.7,
                                      widthSubtitle: width*0.7,
                                      hintInput: 'Escreva aqui',
                                      enabled: false,
                                      onChanged: (v)=>setState((){}),
                                    ),
                                    DropdownWithSubtitle(
                                        subtitle: 'CBO',
                                        select: CBO_RESP_CADASTRO,
                                        widthDropdown: width*0.673,
                                        widthContainerDropdown: width*0.5,
                                        widthSubtitle: width*0.3,
                                        hintDropdown: 'CBO',
                                        onChanged:!editing?null: (value)=>setState(()=>CBO_RESP_CADASTRO = value),
                                        list: listCBO
                                    ),
                                    DropdownWithSubtitle(
                                        subtitle: 'Código da Equipe',
                                        select: INE_RESP_CADASTRO,
                                        widthDropdown: width*0.672,
                                        widthContainerDropdown: width*0.5,
                                        widthSubtitle: width*0.3,
                                        hintDropdown: 'Código da Equipe',
                                        onChanged:!editing?null: (value){
                                          setState(() {
                                            INE_RESP_CADASTRO = value;
                                          });
                                        },
                                        list: listINEPROF
                                    ),
                                    GestureDetector(
                                      onTap:!edit?null: ()=>escolherprazoInicio(context),
                                      child: InputWithSubtitle(
                                        controller: DT_CADASTRO,
                                        subtitle: 'Data do Cadastro',
                                        errorInput: 'Campo Obrigatório!',
                                        labelInput: 'Data do Cadastro',
                                        widthInput: width*0.7,
                                        widthSubtitle: width*0.7,
                                        hintInput: 'Escreva aqui',
                                        enabled: false,
                                        mandatory: mandatory,
                                        onChanged: (v)=>setState((){}),
                                      ),
                                    ),
                                    DT_CADASTRO.text.isEmpty&& mandatory?ErrorDefault():Container(),
                                  ],
                                ),
                              ),
                            ]
                        ),
                      ],
                    ),
                  ),
                  CNS_VALIDO?Card(
                    margin: EdgeInsets.all(10),
                    child: Container(
                      padding: const EdgeInsets.all(8.0),
                      width: width,
                      height: heigth*0.1,
                      child: Row(
                        children: [
                          Icon(Icons.warning,color: ColorPalette.red,),
                          Container(
                            width: width*0.9,
                            child: TextDefault(
                              text: 'CNS do Profissional inválido. Este cadastro não será exportado para o e-SUS.',
                              fontSize: 15,
                              maxLines: 2,
                              color: ColorPalette.red,
                            ),
                          ),
                        ],
                      ),
                    ),
                  ):Container()
                ]
            )
        ),
      ),
    );
  }
}
