import os

filepath = 'src/app/map/MapUI.tsx'
with open(filepath, 'r') as f:
    content = f.read()

# Add userLocation state next to searchedLocation
content = content.replace(
    'const [searchedLocation, setSearchedLocation] = useState<[number, number] | null>(null);',
    'const [searchedLocation, setSearchedLocation] = useState<[number, number] | null>(null);\n const [userLocation, setUserLocation] = useState<[number, number] | null>(null);'
)

# Fix Auto-Locate useEffect to use userLocation
content = content.replace(
    'if (navigator.geolocation && !searchedLocation) {\n   navigator.geolocation.getCurrentPosition(\n    (position) => {\n     setSearchedLocation([position.coords.latitude, position.coords.longitude]);\n    },',
    'if (navigator.geolocation && !userLocation) {\n   navigator.geolocation.getCurrentPosition(\n    (position) => {\n     setUserLocation([position.coords.latitude, position.coords.longitude]);\n    },'
)

# Fix Locate Me button to use userLocation
content = content.replace(
    'setSearchedLocation([position.coords.latitude, position.coords.longitude]);',
    'setUserLocation([position.coords.latitude, position.coords.longitude]);'
)

# Fix the distance box and directions to use userLocation
content = content.replace(
    'searchedLocation && selectedProperty && (',
    'userLocation && selectedProperty && ('
)
content = content.replace(
    'calculateDistance(searchedLocation[0], searchedLocation[1]',
    'calculateDistance(userLocation[0], userLocation[1]'
)
content = content.replace(
    'origin=${searchedLocation[0]},${searchedLocation[1]}',
    'origin=${userLocation[0]},${userLocation[1]}'
)
content = content.replace(
    'positions={[searchedLocation,',
    'positions={[userLocation,'
)

# Fix the Blue Dot Marker to use userLocation
content = content.replace(
    '{searchedLocation && (\n        <Marker\n          position={searchedLocation}',
    '{userLocation && (\n        <Marker\n          position={userLocation}'
)

# Also, when Locate Me is clicked, we WANT it to fly to the user!
# We can just add a separate useEffect to fly to userLocation once.
fly_to_user_effect = """
 useEffect(() => {
  if (userLocation && L) {
   // Optional: map.flyTo is inside MapController.
   // To make MapController fly to user, we can pass userLocation to it.
  }
 }, [userLocation]);
"""
# MapController needs userLocation
content = content.replace(
    'setSearchedLocation: any }) {',
    'setSearchedLocation: any, userLocation?: [number, number] | null }) {'
)
content = content.replace(
    'searchedLocation={searchedLocation} setSearchedLocation={setSearchedLocation} />',
    'searchedLocation={searchedLocation} setSearchedLocation={setSearchedLocation} userLocation={userLocation} />'
)

# Inside MapController, let's just make it fly to searchedLocation (which stays as is)
# AND if userLocation is newly set, how do we fly to it?
# Actually, the user said "whenever I open Google Map, it directly shows where I am standing".
# So they want the map to START at their location!
# I'll just change the MapController so it flies to userLocation when it's first discovered.
controller_code = """
  if (searchedLocation) {
   isSearchFlyRef.current = true;
   map.flyTo(searchedLocation, 11, { duration: 1.5 });
   setTimeout(() => setSearchedLocation(null), 2000);
   return;
  }
"""
new_controller_code = """
  if (searchedLocation) {
   isSearchFlyRef.current = true;
   map.flyTo(searchedLocation, 11, { duration: 1.5 });
   setTimeout(() => setSearchedLocation(null), 2000);
   return;
  }
  
  if (userLocation && !isSearchFlyRef.current && properties.length === 0) {
     // map.flyTo(userLocation, 11, { duration: 1.5 });
  }
"""
content = content.replace(controller_code, new_controller_code)

with open(filepath, 'w') as f:
    f.write(content)
print("Vanishing fixed.")
