import streamlit as st
import firebase_admin
from firebase_admin import credentials, db
from datetime import datetime
import base64
from io import BytesIO
from PIL import Image
import requests
# Initialize Firebase Realtime Database
if not firebase_admin._apps:
cred = credentials.Certificate("firebase_credentials.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
})
# Firebase Authentication REST API
FIREBASE_AUTH_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyAj-0voQamIhPvnWZPd_SwkhlOR1pXynvg"
st.title("Binsight Driver Dashboard")
# Session state for authentication
if "authenticated" not in st.session_state:
st.session_state.authenticated = False
if "driver_email" not in st.session_state:
st.session_state.driver_email = None
# Authentication UI
st.sidebar.header("Driver Login")
def login():
email = st.sidebar.text_input("Enter your email")
password = st.sidebar.text_input("Enter your password", type="password")
if st.sidebar.button("Login"):
payload = {"email": email, "password": password, "returnSecureToken": True}
response = requests.post(FIREBASE_AUTH_URL, json=payload)
if response.status_code == 200:
st.session_state.authenticated = True
st.session_state.driver_email = email
st.sidebar.success(f"Logged in as {email}")
st.rerun()
else:
st.sidebar.error("Invalid credentials or user does not exist.")
# Logout functionality
def logout():
st.session_state.authenticated = False
st.session_state.driver_email = None
st.rerun()
if st.session_state.authenticated:
st.sidebar.button("Logout", on_click=logout)
else:
login()
st.stop()
# Fetch allocated tasks
dustbins_ref = db.reference("dustbins")
dustbins = dustbins_ref.get() or {}
allocated_tasks = {
key: value for key, value in dustbins.items()
if value.get("allocated_truck") == st.session_state["driver_email"] and value.get("status") == "Allocated"
}
st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
for key, value in allocated_tasks.items():
with st.expander(f"📍 Task at {value['address']}"):
st.write(f"**Latitude**: {value['latitude']}")
st.write(f"**Longitude**: {value['longitude']}")
if "image" in value:
image_data = base64.b64decode(value["image"])
st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
if st.button(f"Mark as Done", key=f"done_{key}"):
dustbins_ref.child(key).update({
"status": "Completed",
"completed_at": str(datetime.now()),
"completed_by": st.session_state["driver_email"]
})
st.success(f"Task at {value['address']} marked as completed!")
# Back button to redirect to dashboard
st.markdown("
", unsafe_allow_html=True)
st.markdown("", unsafe_allow_html=True)
# Best version without back button
# import streamlit as st
# import firebase_admin
# from firebase_admin import credentials, db
# from datetime import datetime
# import base64
# from io import BytesIO
# from PIL import Image
# import requests
# # Initialize Firebase Realtime Database
# if not firebase_admin._apps:
# cred = credentials.Certificate("firebase_credentials.json")
# firebase_admin.initialize_app(cred, {
# 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# })
# # Firebase Authentication REST API
# FIREBASE_AUTH_URL = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=AIzaSyAj-0voQamIhPvnWZPd_SwkhlOR1pXynvg"
# st.title("Binsight Driver Dashboard")
# # Session state for authentication
# if "authenticated" not in st.session_state:
# st.session_state.authenticated = False
# if "driver_email" not in st.session_state:
# st.session_state.driver_email = None
# # Authentication UI
# st.sidebar.header("Driver Login")
# def login():
# email = st.sidebar.text_input("Enter your email")
# password = st.sidebar.text_input("Enter your password", type="password")
# if st.sidebar.button("Login"):
# payload = {"email": email, "password": password, "returnSecureToken": True}
# response = requests.post(FIREBASE_AUTH_URL, json=payload)
# if response.status_code == 200:
# st.session_state.authenticated = True
# st.session_state.driver_email = email
# st.sidebar.success(f"Logged in as {email}")
# st.rerun()
# else:
# st.sidebar.error("Invalid credentials or user does not exist.")
# # Logout functionality
# def logout():
# st.session_state.authenticated = False
# st.session_state.driver_email = None
# st.rerun()
# if st.session_state.authenticated:
# st.sidebar.button("Logout", on_click=logout)
# else:
# login()
# st.stop()
# # Fetch allocated tasks
# dustbins_ref = db.reference("dustbins")
# dustbins = dustbins_ref.get() or {}
# allocated_tasks = {
# key: value for key, value in dustbins.items()
# if value.get("allocated_truck") == st.session_state["driver_email"] and value.get("status") == "Allocated"
# }
# st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
# for key, value in allocated_tasks.items():
# with st.expander(f"📍 Task at {value['address']}"):
# st.write(f"**Latitude**: {value['latitude']}")
# st.write(f"**Longitude**: {value['longitude']}")
# if "image" in value:
# image_data = base64.b64decode(value["image"])
# st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
# if st.button(f"Mark as Done", key=f"done_{key}"):
# dustbins_ref.child(key).update({
# "status": "Completed",
# "completed_at": str(datetime.now()),
# "completed_by": st.session_state["driver_email"]
# })
# st.success(f"Task at {value['address']} marked as completed!")
## Below code is working but it is doesn't having login proper for user. anyone can login
# import streamlit as st
# import firebase_admin
# from firebase_admin import credentials, db
# from datetime import datetime
# import base64
# from io import BytesIO
# from PIL import Image
# # Initialize Firebase (Check if already initialized)
# if not firebase_admin._apps:
# cred = credentials.Certificate("firebase_credentials.json")
# firebase_admin.initialize_app(cred, {
# 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# })
# st.title("Binsight Driver Dashboard")
# st.sidebar.header("Driver Login")
# driver_email = st.sidebar.text_input("Enter your email")
# login_button = st.sidebar.button("Login")
# if login_button and driver_email:
# st.session_state["driver_email"] = driver_email
# st.sidebar.success(f"Logged in as {driver_email}")
# if "driver_email" not in st.session_state:
# st.warning("Please log in first.")
# st.stop()
# dustbins_ref = db.reference("dustbins")
# dustbins = dustbins_ref.get() or {}
# allocated_tasks = {
# key: value for key, value in dustbins.items()
# if value.get("allocated_truck") == st.session_state["driver_email"] and value.get("status") == "Allocated"
# }
# st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
# for key, value in allocated_tasks.items():
# with st.expander(f"📍 Task at {value['address']}"):
# st.write(f"**Latitude**: {value['latitude']}")
# st.write(f"**Longitude**: {value['longitude']}")
# if "image" in value:
# image_data = base64.b64decode(value["image"])
# st.image(Image.open(BytesIO(image_data)), caption="Dustbin Image", use_column_width=True)
# if st.button(f"Mark as Done", key=f"done_{key}"):
# dustbins_ref.child(key).update({
# "status": "Completed",
# "completed_at": str(datetime.now()),
# "completed_by": st.session_state["driver_email"]
# })
# st.success(f"Task at {value['address']} marked as completed!")
# # Best without image
# # import streamlit as st
# # import firebase_admin
# # from firebase_admin import credentials, db
# # from datetime import datetime
# # # Initialize Firebase
# # if not firebase_admin._apps:
# # cred = credentials.Certificate("firebase_credentials.json")
# # firebase_admin.initialize_app(cred, {
# # 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/'
# # })
# # st.title("Binsight Driver Dashboard")
# # st.sidebar.header("Driver Login")
# # driver_email = st.sidebar.text_input("Enter your email")
# # login_button = st.sidebar.button("Login")
# # if login_button and driver_email:
# # st.session_state["driver_email"] = driver_email
# # st.sidebar.success(f"Logged in as {driver_email}")
# # if "driver_email" not in st.session_state:
# # st.warning("Please log in first.")
# # st.stop()
# # dustbins_ref = db.reference("dustbins")
# # dustbins = dustbins_ref.get() or {}
# # allocated_tasks = {
# # key: value for key, value in dustbins.items()
# # if value.get("allocated_truck") == st.session_state["driver_email"] and value.get("status") == "Allocated"
# # }
# # st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
# # for key, value in allocated_tasks.items():
# # with st.expander(f"📍 Task at {value['address']}"):
# # st.write(f"**Latitude**: {value['latitude']}")
# # st.write(f"**Longitude**: {value['longitude']}")
# # st.write(f"**Classification**: {', '.join([f'{k} ({v:.2f})' for k, v in value['classification'].items()])}")
# # if st.button(f"Mark as Done", key=f"done_{key}"):
# # dustbins_ref.child(key).update({
# # "status": "Completed",
# # "completed_at": str(datetime.now()),
# # "completed_by": st.session_state["driver_email"]
# # })
# # st.success(f"Task at {value['address']} marked as completed!")
# # import streamlit as st
# # import firebase_admin
# # from firebase_admin import credentials, db
# # from datetime import datetime
# # # Initialize Firebase
# # if not firebase_admin._apps:
# # cred = credentials.Certificate("firebase_credentials.json") # Path to your Firebase JSON
# # firebase_admin.initialize_app(cred, {
# # 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/' # Replace with your Firebase Realtime Database URL
# # })
# # # Streamlit App
# # st.title("Binsight Driver Dashboard")
# # st.sidebar.header("Driver Login")
# # # Driver Login
# # driver_email = st.sidebar.text_input("Enter your email")
# # login_button = st.sidebar.button("Login")
# # if login_button:
# # if driver_email:
# # # Fetch allocated tasks from Firebase
# # dustbins_ref = db.reference("dustbins")
# # dustbins = dustbins_ref.get()
# # # Filter tasks for the logged-in driver
# # allocated_tasks = {
# # key: value
# # for key, value in dustbins.items()
# # if value.get("allocated_truck") == driver_email and value.get("status") == "Allocated"
# # }
# # if allocated_tasks:
# # st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
# # for key, value in allocated_tasks.items():
# # with st.expander(f"📍 Task at {value['address']}"):
# # st.write(f"**Latitude**: {value['latitude']}")
# # st.write(f"**Longitude**: {value['longitude']}")
# # st.write(f"**Classification**: {', '.join([f'{k} ({v:.2f})' for k, v in value['classification'].items()])}")
# # st.write(f"**Allocated At**: {value.get('allocated_at', 'N/A')}")
# # # Submit Work Done
# # if st.button(f"Mark as Done", key=f"done_{key}"):
# # dustbins_ref.child(key).update({
# # "status": "Completed",
# # "completed_at": str(datetime.now()),
# # "completed_by": driver_email
# # })
# # st.success(f"Task at {value['address']} marked as completed!")
# # else:
# # st.info("No allocated tasks found.")
# # else:
# # st.error("Please enter your email to login.")
# # import streamlit as st
# # import firebase_admin
# # from firebase_admin import credentials, db
# # from datetime import datetime
# # # Initialize Firebase
# # if not firebase_admin._apps:
# # cred = credentials.Certificate("firebase_credentials.json") # Path to your Firebase JSON
# # firebase_admin.initialize_app(cred, {
# # 'databaseURL': 'https://binsight-beda0-default-rtdb.asia-southeast1.firebasedatabase.app/' # Replace with your Firebase Realtime Database URL
# # })
# # # Streamlit App
# # st.title("Binsight Driver Dashboard")
# # st.sidebar.header("Driver Login")
# # # Driver Login
# # driver_email = st.sidebar.text_input("Enter your email", help="Provide your registered email.")
# # login_button = st.sidebar.button("Login")
# # if login_button:
# # if driver_email:
# # # Fetch allocated tasks from Firebase
# # dustbins_ref = db.reference("dustbins")
# # dustbins = dustbins_ref.get()
# # if not dustbins:
# # st.info("No tasks available.")
# # else:
# # # Filter tasks for the logged-in driver
# # allocated_tasks = {
# # key: value
# # for key, value in dustbins.items()
# # if value.get("allocated_truck") == driver_email and value.get("status") == "Allocated"
# # }
# # if allocated_tasks:
# # st.subheader(f"Allocated Tasks ({len(allocated_tasks)})")
# # for key, value in allocated_tasks.items():
# # with st.expander(f"📍 Task at {value['address']}"):
# # st.write(f"**Latitude**: {value['latitude']}")
# # st.write(f"**Longitude**: {value['longitude']}")
# # st.write(f"**Classification**: {', '.join([f'{k} ({v:.2f})' for k, v in value['classification'].items()])}")
# # st.write(f"**Allocated At**: {value.get('allocated_at', 'N/A')}")
# # # Submit Work Done
# # if st.button(f"Mark as Done", key=f"done_{key}"):
# # dustbins_ref.child(key).update({
# # "status": "Completed",
# # "completed_at": str(datetime.now()),
# # "completed_by": driver_email,
# # })
# # st.success(f"Task at {value['address']} marked as completed!")
# # else:
# # st.info("No allocated tasks found for your account.")
# # else:
# # st.error("Please enter your email to login.")