TermoAutorizacaoResponse.fromJson constructor

TermoAutorizacaoResponse.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory TermoAutorizacaoResponse.fromJson(Map<String, dynamic> json) {
  final mensagens = <MensagemNegocio>[];

  if (json['mensagens'] != null) {
    if (json['mensagens'] is List) {
      for (final msg in json['mensagens']) {
        mensagens.add(MensagemNegocio.fromJson(msg));
      }
    } else if (json['mensagens'] is String) {
      // Caso especial quando mensagens vem como string
      mensagens.add(
        MensagemNegocio(codigo: 'INFO', texto: json['mensagens'].toString()),
      );
    }
  }

  // Tratar resposta de cache (quando não há 'dados')
  if (json['cacheado'] == true ||
      json['dados'] == null ||
      json['dados'].toString().isEmpty) {
    // Resposta de cache (status 304) sem dados
    return TermoAutorizacaoResponse(
      status: int.tryParse(json['status']?.toString() ?? '304') ?? 304,
      mensagens: mensagens.isNotEmpty
          ? mensagens
          : [
              MensagemNegocio(
                codigo: 'CACHE',
                texto:
                    json['mensagem']?.toString() ?? 'Token em cache válido',
              ),
            ],
      dados: json['dados']?.toString(),
      autenticarProcuradorToken: json['autenticar_procurador_token']
          ?.toString(),
      dataExpiracao: DateTime.tryParse(
        json['data_hora_expiracao']?.toString() ?? '',
      ),
      isCacheValido: true,
    );
  }

  // Resposta normal com dados
  String? token;
  DateTime? dataExpiracao;

  try {
    final dadosObj = json['dados'] is String
        ? jsonDecode(json['dados'])
        : json['dados'];
    token = dadosObj['autenticar_procurador_token']?.toString();
    if (dadosObj['data_hora_expiracao'] != null) {
      dataExpiracao = DateTime.tryParse(
        dadosObj['data_hora_expiracao'].toString(),
      );
    }
  } catch (e) {
    // Se falhar ao parsear dados, apenas continuar sem eles
  }
  return TermoAutorizacaoResponse(
    status: int.tryParse(json['status']?.toString() ?? '200') ?? 200,
    mensagens: mensagens,
    dados: json['dados']?.toString(),
    autenticarProcuradorToken: token,
    dataExpiracao: dataExpiracao,
    isCacheValido: (json['status']) == 304 ? true : false,
  );
}