def crear_servicio(_idCategoria, _descripcion):
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        # validate the received values
        if _idCategoria and _descripcion:
            # All Good, let's call MySQL
            cursor.callproc('sp_crearServicio', (_idCategoria, _descripcion))
            conn.commit()
            return json.dumps(
                {
                    'mensaje': 'Registro satisfactorio!',
                    'respuesta': 'OK'
                },
                sort_keys=True)
        else:
            return json.dumps(
                {
                    'mensaje': 'Falta información!',
                    'respuesta': 'FI'
                },
                sort_keys=True)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def listar_medico():
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        cursor.callproc('sp_listarMedico')
        for result in cursor.stored_results():
            rv = result.fetchall()

        payload = []
        content = {}
        for result in rv:
            content = {
                'idMedico': result[0],
                'nombreCompleto': result[1],
                'documento': result[2],
                'idCategoria': result[3],
                'descripcionCategoria': result[4],
                'fechaNacimiento': result[5]
            }
            payload.append(content)
            content = {}
        return jsonify(payload)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def listar_servicios():
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        cursor.callproc('sp_listarServicio')
        for result in cursor.stored_results():
            rv = result.fetchall()

        payload = []
        content = {}
        for result in rv:
            content = {
                'idServicio': result[0],
                'descripcion': result[1],
                'idCategoria': result[2],
            }
            payload.append(content)
            content = {}
        return jsonify(payload)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def listar_usuario():
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        cursor.callproc('sp_listarUsuario')
        for result in cursor.stored_results():
            rv = result.fetchall()

        payload = []
        content = {}
        for result in rv:
            content = {
                'idUsuario': result[0],
                'nombre': result[1],
                'email': result[2],
                'tipo': result[3]
            }
            payload.append(content)
            content = {}
        return jsonify(payload)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def registro_usuario(_usuario, _email, _clave, _tipo):
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        # validate the received values
        if _usuario and _email and _clave:
            # All Good, let's call MySQL
            _hashed_password = generate_password_hash(_clave)
            cursor.callproc('sp_crearUsuario',
                            (_usuario, _email, _hashed_password, _tipo))
            conn.commit()
            return json.dumps(
                {
                    'mensaje': 'Registro satisfactorio!',
                    'respuesta': 'OK'
                },
                sort_keys=True)

        else:
            return json.dumps(
                {
                    'mensaje': 'Falta información!',
                    'respuesta': 'FI'
                },
                sort_keys=True)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def crear_tarifa(_idServicio, _idMedico, _precio):
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        # validate the received values
        if _idServicio and _idMedico and _precio:
            # All Good, let's call MySQL
            cursor.callproc('sp_crearTarifa',
                            (_idServicio, _idMedico, _precio))
            conn.commit()
            return json.dumps(
                {
                    'mensaje': 'Registro satisfactorio!',
                    'respuesta': 'OK'
                },
                sort_keys=True)
        else:
            return json.dumps(
                {
                    'mensaje': 'Falta información!',
                    'respuesta': 'FI'
                },
                sort_keys=True)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def verificarAdmin(_claveAdmin):
    _usuarioAdmin = 'admin'
    con = conectarBD()
    cursor = con.cursor()
    args = [_usuarioAdmin, 0, 1]
    result_args = cursor.callproc('sp_verificarUsuario', args)
    if (result_args[1] != None) and (check_password_hash(
            result_args[2], _claveAdmin) == True):
        return True
    else:
        return False
def ingreso_usuario(_usuario, _clave):
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        # validate the received values
        if _usuario and _clave:
            args = [_usuario, 0, 1]
            result_args = cursor.callproc('sp_verificarUsuario', args)
            if (result_args[1] != None):
                if (check_password_hash(result_args[2], _clave) == True):
                    return json.dumps(
                        {
                            'mensaje': 'Bienvenido {}!'.format(_usuario),
                            'respuesta': 'OK'
                        },
                        sort_keys=True)
                else:
                    return json.dumps(
                        {
                            'mensaje': 'clave invalida!',
                            'respuesta': 'DI'
                        },
                        sort_keys=True)
            else:
                return json.dumps(
                    {
                        'mensaje': 'Usuario no existe!',
                        'respuesta': 'UI'
                    },
                    sort_keys=True)
        else:
            return json.dumps(
                {
                    'mensaje': 'Falta información!',
                    'respuesta': 'FI'
                },
                sort_keys=True)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
def crear_medico(_primerNombre, _segundoNombre, _primerApellido,
                 _segundoApellido, _documento, _especialidad,
                 _fechaNacimiento):
    try:
        conn = conectarBD()
        cursor = conn.cursor()
        # validate the received values
        if _primerNombre and _segundoNombre and _primerApellido and _segundoApellido and _documento and _especialidad and _fechaNacimiento:
            # All Good, let's call MySQL
            cursor.callproc('sp_crearMedico',
                            (_primerNombre, _segundoNombre, _primerApellido,
                             _segundoApellido, _documento, _especialidad,
                             _fechaNacimiento))
            conn.commit()
            return json.dumps(
                {
                    'mensaje': 'Registro satisfactorio!',
                    'respuesta': 'OK'
                },
                sort_keys=True)
        else:
            return json.dumps(
                {
                    'mensaje': 'Falta información!',
                    'respuesta': 'FI'
                },
                sort_keys=True)
    except Exception as e:
        return json.dumps({
            'mensaje': str(e),
            'respuesta': 'ER'
        },
                          sort_keys=True)
    finally:
        cursor.close()
        conn.close()
@app.route('/tarifa/crear',methods=['POST'])
def crearTarifa():
    try:
        # read the posted values from the UI
        _idServicio = request.form['idServicio']
        _idMedico = request.form['idMedico']
        _precio = request.form['precio']
        return crear_tarifa(_idServicio,_idMedico,_precio)
    except Exception as e:
        return json.dumps({'mensaje':str(e),'respuesta':'ER'}, sort_keys=True)

##--------------------
###verifica conexión BD
##--------------------
try:
  conectarBD()
except mysql.connector.Error as err:
  if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
    print("Por favor corrige la información de usuario o contraseña")
  elif err.errno == errorcode.ER_BAD_DB_ERROR:
    print("Base de datos no existe")
  else:
    print(err)
else:
    print("conexión exitosa")
    app.run()