def login():
    if request.method == "POST":
        email_v = request.form.get("email")
        password_v = request.form.get("password")
        # check if email and password exists in db
        existing_seller = Seller.objects(seller_email=email_v).first()

        if existing_seller:
            # ensure hashed password matches user input
            password_valid = existing_seller.check_password(password_v)
            if password_valid:
                session["user"] = existing_seller.seller_name
                session["userId"] = str(existing_seller.id)
                flash(f"Welcome {existing_seller.seller_name}")
                return redirect(url_for("get_products"))
                return render_template("products.html", seller=existing_seller)

            else:
                # invalid password match
                flash("Incorrect Username and/or Password")
                return redirect(url_for("login"))

        else:
            # username doesn't exist
            flash("Incorrect Username and/or Password")
            return redirect(url_for("login"))

    return render_template("login.html")
def register():
    if request.method == "POST":
        seller_name_v = request.form.get("seller_name")
        seller_email_v = request.form.get("email")
        seller_phone_v = request.form.get("phone")
        seller_city_v = request.form.get("city")
        password_v = request.form.get("password")

        # check if username already exists in db
        existing_seller = Seller.objects(seller_email=seller_email_v).first()

        if existing_seller:
            flash("User already exists")
            return redirect(url_for("register"))

        new_seller = Seller(seller_name=seller_name_v,
                            seller_email=seller_email_v,
                            seller_city=seller_city_v,
                            seller_phone=seller_phone_v)

        new_seller.set_password(password_v)

        new_seller.save()

        # put the new user into 'session' cookie
        session["user"] = new_seller.seller_name
        session["userId"] = str(new_seller.id)

        print(session)
        print(new_seller.id)
        flash("Registration Successful!")
        return redirect(url_for("update_profile", userId=session["userId"]))
    return render_template("register.html")
def update_profile(userId):
    print(session.get('user_id'))
    print(session.get('userId'))
    seller = Seller.objects(id=userId).first()
    if request.method == "GET":
        sellers_listings = ProductListing.objects(seller_id=seller).all()
        return render_template("profile.html",
                               seller=seller,
                               listings=sellers_listings)

    seller_name_v = request.form.get("seller_name")
    seller_email_v = request.form.get("email")
    seller_phone_v = request.form.get("phone")
    seller_city_v = request.form.get("city")
    password_v = request.form.get("password")
    seller_photo_v = request.files.get("photo")

    photo_url = upload_image("users", seller_photo_v)

    seller.seller_name = seller_name_v
    seller.email = seller_email_v
    seller.phone = seller_phone_v
    seller.city = seller_city_v
    seller.password = password_v
    seller.seller_photoURL = photo_url
    seller.save()

    return jsonify({"msg": "Profile updated successfully"})
def list_product(userId):
    categories = Category.objects().all()
    seller = Seller.objects(id=userId).first()
    if request.method == "POST":
        category_id = request.form.get("category_id")
        product_name_v = request.form.get("product_name")
        product_price_v = request.form.get("product_price")
        product_description_v = request.form.get("product_description")
        product_photo_v = request.files["photo"]

        photo_url = upload_image("products", product_photo_v)

        # check if product is already listed
        existing_product = ProductListing.objects(
            product_name=product_name_v).first()

        category = Category.objects(id=category_id)
        if existing_product:
            flash("Product already listed")
            return redirect(url_for("list_product"))

        new_listing = ProductListing(category_id=category_id,
                                     product_name=product_name_v,
                                     product_price=product_price_v,
                                     product_description=product_description_v,
                                     seller_id=seller,
                                     product_photoURL=photo_url)

        new_listing.save()
        flash("Item listed")

        return redirect(url_for("list_product", userId=userId))

    return render_template("listing_page.html",
                           seller=seller,
                           categories=categories)