// 地図作成
var map = L.map('map').setView([35.681, 139.767], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

var points = [];       // ユーザーがクリックした地点
var markers = [];      // マーカー管理
var routeLine = null;  // ルートポリライン

// 標高API（Google Elevation API）を使う場合は APIキーをセット
const GOOGLE_ELEVATION_KEY = "YOUR_API_KEY_HERE";

// マップクリックで地点追加
map.on('click', function(e){
  if(points.length >= 3){
    alert("最大3地点までです");
    return;
  }

  points.push([e.latlng.lat, e.latlng.lng]);
  var marker = L.marker(e.latlng).addTo(map)
    .bindPopup(`地点 ${points.length}`).openPopup();
  markers.push(marker);

  if(points.length >= 2){
    drawRoute();
  }
});

function drawRoute(){
  // OSRM APIの座標形式に変換
  var coords = points.map(p => p[1]+','+p[0]).join(';');

  fetch(`https://router.project-osrm.org/route/v1/foot/${coords}?overview=full&geometries=geojson`)
    .then(res => res.json())
    .then(data => {
      if(routeLine) map.removeLayer(routeLine);

      // GeoJSON形式でルート取得・描画
      var routeGeo = data.routes[0].geometry;
      routeLine = L.geoJSON(routeGeo, {color:'blue'}).addTo(map);

      map.fitBounds(routeLine.getBounds());

      // 高低差情報取得
      getElevation(routeLine.getLatLngs());
    });
}

function getElevation(latlngs){
  if(!GOOGLE_ELEVATION_KEY) return;

  // 取得点を間引き（API制限回避）
  var samplePoints = latlngs.filter((p,i) => i % Math.floor(latlngs.length/50+1) === 0);
  var path = samplePoints.map(p => p.lat + ',' + p.lng).join('|');

  fetch(`https://maps.googleapis.com/maps/api/elevation/json?locations=${path}&key=${GOOGLE_ELEVATION_KEY}`)
    .then(res => res.json())
    .then(data => {
      var info = "<h3>標高情報（m）</h3><ul>";
      data.results.forEach((r,i)=>{
        info += `<li>ポイント ${i+1}: ${r.elevation.toFixed(1)} m</li>`;
      });
      info += "</ul>";
      document.getElementById('info').innerHTML = info;
    });
}
