import requests

# RASPI_HOSTNAME = "eee-w014-007.simple.eee.intern" # your Raspi-hostname here!
RASPI_HOSTNAME = "localhost"

PORT="5000"
BASE_URL = f"http://{RASPI_HOSTNAME}:{PORT}"

# GET request: show all users
def get_users() -> list: # returns all users as list
    response = requests.get(BASE_URL+"/api/users")
    print( "Status Code  :", response.status_code)

    if response.ok: return response.json()
    else: return None

# GET request: show specific users, identified by id
def get_user( user_id: int ) -> dict: # returns a users
    response = requests.get(BASE_URL+f"/api/users/{user_id}")
    print( "Status Code  :", response.status_code)

    if response.ok: return response.json()
    else: return None

# POST request: create a new user
def create_user( user: dict ): # returns newly created user 
    response = requests.post( BASE_URL+"/api/users", json=user )
    print( "Status Code  :", response.status_code)

    if response.ok: return response.json()
    else: return None

# PUT request: update a user
def update_user( user_id: int, user: dict ): # returns newly created user
    response = requests.put( BASE_URL+f"/api/users/{user_id}", json=user)
    print( "Status Code  :", response.status_code)

    if response.ok: return response.json()
    else: return None

# DELETE request: delete user, identified by id
def delete_user(user_id):
    response = requests.delete( BASE_URL+f"/api/users/{user_id}" )
    print( "Status Code  :", response.status_code)

    if response.ok: return response.json()
    else: return None

if __name__ == "__main__":

    # get all users
    print("All users:\n",  get_users() )

    # get user with id 1
    print("User with id 1:\n", get_user(1) )

    # create user "DaisY" (deliberate typo!)
    new_user = {"name": "DaisY"}
    user =  create_user(new_user)
    print("User created:\n", user)

    # update user "DaisY" to "Daisy
    id = user["id"]
    user = {"name": "Daisy"}
    print("User updated:\n", update_user(id, user) )

    # get all users
    print("All users:\n", get_users() )

    # delete user by id
    id = 1
    print( f"Deleted user with id {id}:\n", delete_user(id) )

    # get all users
    print("All users:\n",  get_users() )

    # Testing ERRORs

    # get user with id 1, which was previously deleted
    assert get_user(id) == None, "Getting a non-existing user should return 'None'." 

    # delete user with id 1, which was already deleted
    assert delete_user(id) == None, "Getting a non-existing user should return 'None'."