import { gpx, kml } from '@tmcw/togeojson/dist/togeojson.es.js';

export const polygonCadastresFill = {
  'fill-color': '#EC3323',
  'fill-opacity': 0.3
};

export const polygonCadastresLine = {
  'line-color': 'rgba(255, 0, 0, 1)',
  'line-width': 4,
  'line-dasharray': [1, 1]
};

export function normalizeFeatureCollection(featureCollection) {
  const features = [];
  for (const feature of featureCollection.features) {
    switch (feature.geometry.type) {
      case 'MultiPoint':
        for (const coordinates of feature.geometry.coordinates) {
          features.push({
            type: 'Feature',
            geometry: {
              type: 'Point',
              coordinates
            },
            properties: feature.properties
          });
        }
        break;
      case 'MultiLineString':
        for (const coordinates of feature.geometry.coordinates) {
          features.push({
            type: 'Feature',
            geometry: {
              type: 'LineString',
              coordinates
            },
            properties: feature.properties
          });
        }
        break;
      case 'MultiPolygon':
        for (const coordinates of feature.geometry.coordinates) {
          features.push({
            type: 'Feature',
            geometry: {
              type: 'Polygon',
              coordinates
            },
            properties: feature.properties
          });
        }
        break;
      case 'GeometryCollection':
        for (const geometry of feature.geometry.geometries) {
          features.push({
            type: 'Feature',
            geometry,
            properties: feature.properties
          });
        }
        break;
      default:
        features.push(feature);
    }
  }

  featureCollection.features = features;
  return featureCollection;
}

export function readGeoFile(file) {
  const isGpxFile = file.name.includes('.gpx');
  const reader = new FileReader();

  return new Promise((resolve) => {
    reader.onload = (event) => {
      const xml = new DOMParser().parseFromString(
        event.target.result,
        'text/xml'
      );
      const featureCollection = normalizeFeatureCollection(
        isGpxFile ? gpx(xml) : kml(xml)
      );

      resolve(featureCollection);
    };
    reader.readAsText(file, 'UTF-8');
  });
}