package geo.pkg;

import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.Collection;
import java.util.jar.Attributes.Name;

import javax.activation.FileDataSource;

import org.geotools.data.DataUtilities;
import org.geotools.data.DefaultFeatureResults;
import org.geotools.data.DefaultTransaction;
import org.geotools.data.FeatureReader;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.Query;
import org.geotools.data.Transaction;
import org.geotools.data.shapefile.ShapefileAttributeReader;
import org.geotools.data.shapefile.ng.ShapefileDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.data.simple.SimpleFeatureStore;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureCollections;
import org.geotools.feature.FeatureIterator;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.map.MapContent;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.data.JFileDataStoreChooser;
import org.opengis.feature.Feature;
import org.opengis.feature.GeometryAttribute;
import org.opengis.feature.simple.SimpleFeatureType;
import org.postgis.LinearRing;

import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Polygon;
//import org.geotools.feature.Feature;

/**
 * Prompts the user for a shapefile and displays the contents on the screen in a map frame.
 * <p>
 * This is the GeoTools Quickstart application used in documentationa and tutorials. *
 */
public class GeoSample {

    /**
     * GeoTools Quickstart demo application. Prompts the user for a shapefile and displays its
     * contents on the screen in a map frame
     */
    public static void main(String[] args) throws Exception  {
        // display a data store file chooser dialog for shapefiles
    	
    	File base = new File("/home/hadoop/Documents/GIS DATA/Districts and Talukas/Karnataka_new_districts_Taluk.shp");
    	File data = new File("/home/hadoop/Desktop/kabul_shapefile/kabul_highway.shp");
    	URI base_uri = base.toURI();
    	URL base_url = new URL(base_uri.toString());
    	URI data_uri = data.toURI();
    	URL data_url = data_uri.toURL();
    	
        org.geotools.data.shapefile.ShapefileDataStore base_store = new org.geotools.data.shapefile.ShapefileDataStore(base_url);
        org.geotools.data.shapefile.ShapefileDataStore data_store = new org.geotools.data.shapefile.ShapefileDataStore(data_url);
        
        System.out.println("Datastore represents no. of files or a package of files/Bundle");
        String base_name = base_store.getTypeNames()[0];
        String data_name = data_store.getTypeNames()[0];
        System.out.println("Name of one of the files in the datastore:: "+base_name);
        System.out.println("Name of one of the files in the datastore:: "+data_name);
        
        SimpleFeatureSource featureSource1 = base_store.getFeatureSource(base_name);
        SimpleFeatureSource featureSource2 = data_store.getFeatureSource(data_name);
        
        DefaultFeatureResults featureResults1 = (DefaultFeatureResults) featureSource1.getFeatures();
        DefaultFeatureResults featureResults2 = (DefaultFeatureResults) featureSource2.getFeatures();
        System.out.println("Just like a resultset in JDBC, here too the FeatureResults gets generated.");
        System.out.println("FeatureResults::"+featureResults1);
        System.out.println("FeatureResults::"+featureResults2);
        
        int record_count1 = featureResults1.getCount();
        int record_count2 = featureResults2.getCount();
//        System.out.println("Records Count1 ::"+record_count1);
//        System.out.println("Records Count2 ::"+record_count2);
        
        FeatureReader featureReader1 = featureResults1.reader();
        FeatureReader featureReader2 = featureResults2.reader();
        
//       System.out.println("But, we cannot iterate through FeatureResults. As, we require a FeatureReader. Thus, we use FeatureReader to read Features from FeatureResults ");
//        System.out.println("FeatureType will be obviously same for all the records. It represents the geometry/shape we r dealing with");
        System.out.println("The Geom we are dealing with::");
        System.out.println(featureReader1.getFeatureType().getGeometryDescriptor().getType().getName());
        System.out.println(featureReader2.getFeatureType().getGeometryDescriptor().getType().getName());
        
        Geometry base_geom = (Geometry) featureReader1.getFeatureType().getGeometryDescriptor().getType().getName();
        Geometry data_geom = (Geometry) featureReader2.getFeatureType().getGeometryDescriptor().getType().getName();
       
        
        base_geom.intersection(data_geom);
       
       
    }

}