def create_bug():
    if not request.is_json:
        return jsonify({"details": "No json provided"}), 400

    data = request.get_json()

    token = str(request.headers['authorization']).split(" ")[1]
    status_code, msg = kc_client.token_to_user(token)

    if status_code != requests.codes.ok:
        return msg, status_code

    else:
        user = BugzillaUser.query.filter_by(email=msg['email']).first()
        if user:
            bugzilla_token = user.apikey

            #TODO: check user roles that are able to create bugs
            #msg['roles'] = 'USER_ALLOWED'
            #if "USER_ALLOWED" in msg['roles']:
            status, msg = bz_client.create_bug(reporter_token=bugzilla_token,
                                               bug_data=data,
                                               reporter=msg['email'])
            return jsonify({'details': msg}), status

            #else:
            #    return jsonify({'details': 'User not allowed to create bugs'}), 401
        else:
            print(
                "SERVER > [ERROR] user {} not found in the DB but correctly logged in at Keycloak"
            )
            return jsonify({'details': 'Internal server error'}), 500
def get_bug(bug_id):
    token = str(request.headers['authorization']).split(" ")[1]
    status_code, msg = kc_client.token_to_user(token)
    if status_code == requests.codes.ok:
        user = BugzillaUser.query.filter_by(email=msg['email']).first()
        if user:
            bugzilla_token = user.apikey

            if "SiteManager" in msg['roles']:
                status, msg = bz_client.get_bug(requester_email=msg['email'],
                                                requester_token=bugzilla_token,
                                                bug_id=bug_id,
                                                is_admin=True)
            else:
                status, msg = bz_client.get_bug(requester_email=msg['email'],
                                                requester_token=bugzilla_token,
                                                bug_id=bug_id,
                                                is_admin=False)
            return jsonify({'details': msg}), status

        else:
            print(
                "SERVER > [ERROR] user {} not found in the DB but correctly logged in at Keycloak"
            )
            return jsonify({'details': 'Internal server error'}), 500
    else:
        return msg, status_code
def update_bug(bug_id):
    print("PASO")
    if not request.is_json:
        return jsonify({"details": "No json provided"}), 400

    data = request.get_json()
    print(data)

    token = str(request.headers['authorization']).split(" ")[1]
    status, user_data = kc_client.token_to_user(token)
    print(user_data)
    user = BugzillaUser.query.filter_by(email=user_data['email']).first()

    if user:
        bugzilla_token = user.apikey
        #TODO: Usuario admin tambien tiene que ser admin en Bugzilla
        if "SiteManager" in user_data['roles']:
            status, msg = bz_client.update_bug(
                reporter_email=user_data['email'],
                reporter_token=bugzilla_token,
                bug_data=data,
                bug_id=bug_id,
                is_admin=True)
        else:
            status, msg = bz_client.update_bug(
                reporter_email=user_data['email'],
                reporter_token=bugzilla_token,
                bug_data=data,
                bug_id=bug_id,
                is_admin=False)

    return jsonify({'details': msg}), status
def get_bugs():
    page = request.args.get('page')

    if page != None:
        page = int(page)

    token = str(request.headers['authorization']).split(" ")[1]
    status_code, msg = kc_client.token_to_user(token)

    if status_code == requests.codes.ok:
        user = BugzillaUser.query.filter_by(email=msg['email']).first()
        if user:
            bugzilla_token = user.apikey
            # SiteManager retrieves everything but regular users only 5G-EVE portal related tickets
            if "SiteManager" in msg['roles']:
                status, msg = bz_client.get_bugs(
                    requester_email=msg['email'],
                    requester_token=bugzilla_token,
                    is_admin=True,
                    page=page)
            else:
                status, msg = bz_client.get_bugs(
                    requester_email=msg['email'],
                    requester_token=bugzilla_token,
                    is_admin=False,
                    page=page)

            return jsonify({'details': msg}), status
            #if status != requests.codes.ok:
            #    return jsonify({'details': msg}), status
            #else:
            #sorted_data = sorted(msg['bugs'], key=lambda k: datetime.strptime(k['creation_time'],'%Y-%m-%dT%H:%M:%SZ'), reverse=False)
            #return jsonify({'details': sorted_data}), status

        else:
            print(
                "SERVER > [ERROR] user {} not found in the DB but correctly logged in at Keycloak"
                .format(msg['email']))
            return jsonify({'details': 'Internal server error'}), 500

    return msg, status_code
def create_bug_comment(bug_id):
    if not request.is_json:
        return jsonify({"details": "No json provided"}), 400

    data = request.get_json()

    token = str(request.headers['authorization']).split(" ")[1]
    status_code, msg = kc_client.token_to_user(token)

    if status_code != requests.codes.ok:
        return msg, status_code

    else:
        user = BugzillaUser.query.filter_by(email=msg['email']).first()
        if user:
            bugzilla_token = user.apikey

            if "SiteManager" in msg['roles']:
                status, msg = bz_client.create_bug_comment(
                    user_token=bugzilla_token,
                    bug_id=bug_id,
                    comment_data=data,
                    is_admin=True)
            else:
                status, msg = bz_client.create_bug_comment(
                    user_token=bugzilla_token,
                    bug_id=bug_id,
                    comment_data=data,
                    is_admin=False)

            return jsonify({'details': msg}), status

        else:
            print(
                "SERVER > [ERROR] user {} not found in the DB but correctly logged in at Keycloak"
            )
            return jsonify({'details': 'Internal server error'}), 500