from datetime import datetime from config import supabase async def get_or_create_user(wa_id: str, name: str = None) -> dict: """Get existing user or create new one""" if not supabase: return {"wa_id": wa_id, "name": name or "Unknown"} try: # Try to get existing user response = supabase.table("users").select("*").eq("wa_id", wa_id).execute() if response.data: # User exists, update if name provided user = response.data[0] if name and name != user.get("name"): supabase.table("users").update({"name": name, "updated_at": datetime.utcnow().isoformat()}).eq("wa_id", wa_id).execute() user["name"] = name return user else: # Create new user new_user = { "wa_id": wa_id, "name": name or "Unknown", "created_at": datetime.utcnow().isoformat(), "updated_at": datetime.utcnow().isoformat() } response = supabase.table("users").insert(new_user).execute() return response.data[0] if response.data else new_user except Exception as e: print(f"Error in get_or_create_user: {e}") return {"wa_id": wa_id, "name": name or "Unknown"} async def update_user_activity(wa_id: str): """Update user's last activity timestamp""" if not supabase: return try: supabase.table("users").update({"updated_at": datetime.utcnow().isoformat()}).eq("wa_id", wa_id).execute() except Exception as e: print(f"Error updating user activity: {e}") async def get_user(wa_id: str): """Get user by WhatsApp ID""" if not supabase: return None try: response = supabase.table("users").select("*").eq("wa_id", wa_id).execute() return response.data[0] if response.data else None except Exception as e: print(f"Error getting user: {e}") return None async def list_users(limit: int = 50, offset: int = 0): """List all users with pagination""" if not supabase: return {"users": [], "count": 0} try: response = supabase.table("users").select("*").range(offset, offset + limit - 1).order("created_at", desc=True).execute() return {"users": response.data, "count": len(response.data)} except Exception as e: print(f"Error listing users: {e}") return {"users": [], "count": 0} async def update_user_name(wa_id: str, name: str): """Update user name""" if not supabase: return None try: response = supabase.table("users").update({ "name": name, "updated_at": datetime.utcnow().isoformat() }).eq("wa_id", wa_id).execute() return response.data[0] if response.data else None except Exception as e: print(f"Error updating user: {e}") return None