def criar_sala(request):
    jwt_token = request.data.get('token')
    case_id = request.data.get('case_id')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    try:
        if (not case_id):
            return Response({'error': 'Erro ao encontrar o caso'},
                            status=HTTP_400_BAD_REQUEST)
        caso = Caso.objects.get(id=case_id)
    except Caso.DoesNotExist:
        return Response({'error': 'Erro ao encontrar o caso'},
                        status=HTTP_400_BAD_REQUEST)

    sala = Sala()
    jogador.sala_id = sala.id
    jogador.save()
    sala.caso_id = caso.id
    update(sala)
    sala.save()
    action = Action()
    action.text = '{} entrou na sala.'.format(jogador.name)
    action.room = sala
    action.save()
    serializer = SalaSerializer(sala)
    return Response(data=serializer.data, status=HTTP_200_OK)
def jogadores_sala(request):
    jwt_token = request.data.get('token')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    jogadores = Jogador.objects.filter(sala_id=jogador.sala_id)
    serializer = JogadorSerializer(jogadores, many=True)
    return Response(data=serializer.data, status=HTTP_200_OK)
def get_log(request):
    jwt_token = request.data.get('token')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    if (not jogador.sala_id):
        return Response({'error': 'Jogador não está dentro de uma sala'},
                        status=HTTP_403_FORBIDDEN)
    sala = Sala.objects.get(id=jogador.sala_id)
    actions = reversed(Action.objects.filter(room=sala).order_by('time'))
    serializer = ActionSerializer(actions, many=True)
    return Response(data=serializer.data, status=HTTP_200_OK)
def get_case(request):
    jwt_token = request.data.get('token')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    if (not jogador.sala_id):
        return Response({'error': 'Jogador não está dentro de uma sala'},
                        status=HTTP_403_FORBIDDEN)
    sala = Sala.objects.get(id=jogador.sala_id)
    caso = Caso.objects.get(id=sala.caso_id)
    serializer = CasoSerializer(caso)
    return Response(data=serializer.data, status=HTTP_200_OK)
def send_solution(request):
    jwt_token = request.data.get('token')
    solution = request.data.get('solution')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    try:
        sala = Sala.objects.get(id=jogador.sala_id)
    except Sala.DoesNotExist:
        return Response({'error': 'Usuário não está em uma sala'},
                        status=HTTP_403_FORBIDDEN)
    jogador.sala_id = ''
    jogador.pista_banco = False
    jogador.pista_bar = False
    jogador.pista_penhores = False
    jogador.pista_charutaria = False
    jogador.pista_chaveiro = False
    jogador.pista_docas = False
    jogador.pista_carruagens = False
    jogador.pista_farmacia = False
    jogador.pista_hotel = False
    jogador.pista_livraria = False
    jogador.pista_museu = False
    jogador.pista_parque = False
    jogador.pista_syard = False
    jogador.pista_teatro = False
    jogador.save()
    update(sala)
    action = Action()
    action.text = '{} enviou uma solução para o caso:\n{}'.format(
        jogador.name, solution)
    action.room = sala
    action.save()
    caso = Caso.objects.get(id=sala.caso_id)
    if (sala.jogadores == 0):
        sala.delete()
    return Response({'solution': caso.solucao}, status=HTTP_200_OK)
def entrar_sala(request):
    jwt_token = request.data.get('token')
    sala_id = request.data.get('id')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)

    try:
        sala = Sala.objects.get(id=sala_id)
    except Sala.DoesNotExist:
        return Response({'error': 'A sala não foi encontrada'},
                        status=HTTP_400_BAD_REQUEST)
    jogador.sala_id = sala.id
    jogador.save()
    update(sala)
    action = Action()
    action.text = '{} entrou na sala.'.format(jogador.name)
    action.room = sala
    action.save()
    serializer = SalaSerializer(sala)
    return Response(data=serializer.data, status=HTTP_200_OK)
def sair_sala(request):
    jwt_token = request.data.get('token')
    try:
        jogador = make_jogador(jwt_token)
    except:
        return Response({'error': 'Usuário não identificado'},
                        status=HTTP_403_FORBIDDEN)
    try:
        sala = Sala.objects.get(id=jogador.sala_id)
    except Sala.DoesNotExist:
        return Response({'error': 'Usuário não está em uma sala'},
                        status=HTTP_403_FORBIDDEN)
    jogador.sala_id = ''
    jogador.pista_banco = False
    jogador.pista_bar = False
    jogador.pista_penhores = False
    jogador.pista_charutaria = False
    jogador.pista_chaveiro = False
    jogador.pista_docas = False
    jogador.pista_carruagens = False
    jogador.pista_farmacia = False
    jogador.pista_hotel = False
    jogador.pista_livraria = False
    jogador.pista_museu = False
    jogador.pista_parque = False
    jogador.pista_syard = False
    jogador.pista_teatro = False
    jogador.save()
    update(sala)
    action = Action()
    action.text = '{} saiu da sala.'.format(jogador.name)
    action.room = sala
    action.save()
    serializer = SalaSerializer(sala)
    if (sala.jogadores == 0):
        sala.delete()
    return Response(data=serializer.data, status=HTTP_200_OK)