import streamlit as st import pandas as pd import os import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import geocoder from twilio.rest import Client # ----- Configuration ----- # Replace with your actual credentials or use Streamlit secrets sender_email = "your-email@gmail.com" receiver_email = "receiver-email@gmail.com" sender_password = "your-password" twilio_sid = "your-twilio-sid" twilio_token = "your-twilio-token" twilio_number = "your-twilio-number" st.set_page_config(page_title="Emergency App", layout="centered") # ----- Sidebar Navigation ----- st.sidebar.title("Navigation") app_mode = st.sidebar.selectbox("Choose the app mode", ["User Info", "SOS Alert", "Ambulance Alert", "Send SMS"]) # ----- User Info ----- def user_info_form(): st.title("🧑 User Information Form") name = st.text_input("Name") user_id = st.text_input("User ID") password = st.text_input("Password", type="password") age = st.number_input("Age", min_value=0, max_value=120) gender = st.radio("Gender", ["Male", "Female", "Other"]) phone = st.text_input("Phone Number") email = st.text_input("Email") blood_group = st.selectbox("Blood Group", ["A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"]) allergies = st.text_area("Allergies") medical_conditions = st.text_area("Medical Conditions") if st.button("Submit"): user_data = { "Name": name, "User ID": user_id, "Password": password, "Age": age, "Gender": gender, "Phone": phone, "Email": email, "Blood Group": blood_group, "Allergies": allergies, "Medical Conditions": medical_conditions } df = pd.DataFrame([user_data]) if os.path.exists("user_data.csv"): df.to_csv("user_data.csv", mode='a', header=False, index=False) else: df.to_csv("user_data.csv", index=False) st.success("✅ User information saved successfully!") # ----- SOS Email Alert ----- def send_sos_alert(): st.title("🚨 SOS Email Alert") message = "Emergency! Please respond." if st.button("Send SOS Email"): try: msg = MIMEMultipart() msg['Subject'] = 'SOS Alert' msg['From'] = sender_email msg['To'] = receiver_email msg.attach(MIMEText(message, 'plain')) with smtplib.SMTP('smtp.gmail.com', 587) as server: server.starttls() server.login(sender_email, sender_password) server.send_message(msg) st.success("📧 SOS alert sent successfully via email!") except Exception as e: st.error(f"❌ Failed to send SOS alert: {e}") # ----- Location Fetching ----- def get_location(): g = geocoder.ip('me') return g.latlng if g.ok else None # ----- Ambulance Alert ----- def send_alert_to_hospital(location): message = f"Emergency! Send an ambulance to location: {location}" st.success(f"🏥 Alert sent to hospital: {message}") return message def auto_ambulance_alert(): st.title("🚑 Ambulance Dispatch Alert") if st.button("Send Ambulance Alert"): location = get_location() if location: send_alert_to_hospital(location) else: st.error("❌ Could not determine location.") # ----- SMS Alert via Twilio ----- def send_sms(): st.title("📲 Send SMS Alert") to_number = st.text_input("Enter emergency contact number (with country code):") message_body = "Emergency! Please respond." if st.button("Send SMS"): try: client = Client(twilio_sid, twilio_token) message_body= client.messages.create( body=message_body, from_=twilio_number, to=to_number ) st.success("📩 SMS sent successfully!") except Exception as e: st.error(f"❌ Failed to send SMS: {e}") # ----- Main Logic ----- if app_mode == "User Info": user_info_form() elif app_mode == "SOS Alert": send_sos_alert() elif app_mode == "Ambulance Alert": auto_ambulance_alert() elif app_mode == "Send SMS": send_sms()