var country= "PT"

// Compute the trend of night-time lights.

// Adds a band containing image date as years since 1991.
function createTimeBand(img) {
  var year = ee.Date(img.get('system:time_start')).get('year').subtract(2012);
  return ee.Image(year).byte().addBands(img);
}

// Map the time band creation helper over the night-time lights collection.
// https://earthengine.google.org/#detail/NOAA%2FDMSP-OLS%2FNIGHTTIME_LIGHTS
//var collection = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
//    .select('avg_rad')
//    .map(createTimeBand);

//var collection0 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG').filterDate('2012-01-01', '2012-12-31').select('avg_rad').reduce(ee.Reducer.median());
var albedo01=imageCollection.filterDate('2012-08-01', '2012-11-30').map(createTimeBand);
var albedo02=albedo01.reduce(ee.Reducer.median());
var albedo02=albedo02.select("Albedo_BSA_Band1_median").unmask(3);
var albedo02=albedo02.multiply(1/750.0);
var collection01 =ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2012-08-01', '2012-11-30').map(createTimeBand);
var maxval=0;
var collection02 = collection01.reduce(ee.Reducer.median());
//collection02 = collection02.multiply(collection02.select('avg_rad_median').gte(maxval));
    
//var collection1 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG').filterDate('2013-08-01', '2013-11-30').select('avg_rad').reduce(ee.Reducer.median());
  
var collection11 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2013-08-01', '2013-11-30').map(createTimeBand);
  
var collection12 = collection11.reduce(ee.Reducer.median());

//collection12 = collection12.multiply(collection12.select('avg_rad_median').gte(maxval));
  
var collection2 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2014-08-01', '2014-11-30').select('avg_rad').reduce(ee.Reducer.median());
  
var collection21 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2014-08-01', '2014-11-30').map(createTimeBand);
  
var collection22 = collection21.reduce(ee.Reducer.median());

//collection22 = collection22.multiply(collection22.select('avg_rad_median').gte(maxval));
  
var collection3 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2015-08-01', '2015-11-30').select('avg_rad').reduce(ee.Reducer.median());
  
var collection31 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2015-08-01', '2015-11-30').map(createTimeBand);
  
var collection32 = collection31.reduce(ee.Reducer.median());

//collection32 = collection32.multiply(collection32.select('avg_rad_median').gte(maxval));
  
var collection4 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2016-08-01', '2016-11-30').reduce(ee.Reducer.median());
  
var collection41 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2016-08-01', '2016-11-30').map(createTimeBand);
  
var collection42 = collection41.reduce(ee.Reducer.median());

//collection42 = collection42.multiply(collection42.select('avg_rad_median').gte(maxval));

var collection5 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2017-08-01', '2017-11-30').reduce(ee.Reducer.median());
  
var collection51 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2017-08-01', '2017-11-30').map(createTimeBand);
  
  
var collection52 = collection51.reduce(ee.Reducer.median());
var collection52c = collection52.select('avg_rad_median').subtract(0.15);
collection52c=collection52c.addBands(collection52.select("constant_median")).addBands(collection52.select("cf_cvg_median"));
var collection52=collection52c;
//collection52 = collection52.multiply(collection52.select('avg_rad_median').gte(maxval));



var collection61 = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG')
  .filterDate('2018-08-01', '2018-11-30').map(createTimeBand);
  
var collection62 = collection61.reduce(ee.Reducer.median());

var collection62 = collection61.reduce(ee.Reducer.median());
var collection62c = collection62.select('avg_rad_median').subtract(0.13);
collection62c=collection62c.addBands(collection62.select("constant_median")).addBands(collection62.select("cf_cvg_median"));
var collection62=collection62c;

//collection62 = collection62.multiply(collection62.select('avg_rad_median').gte(maxval));

var VIIRS201209 = ee.Image("NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG/20120901");
var VIIRS201609 = ee.Image("NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG/20160901");
var VIIRS201210 = ee.Image("NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG/20121001");
var VIIRS201610 = ee.Image("NOAA/VIIRS/DNB/MONTHLY_V1/VCMCFG/20161001");

var F162010_c1a = ee.Image("NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4/F16_20100111-20101209_V4");
  
  

//var collectionS = ee.ImageCollection([collection02,collection42]);

  
//var collection = collection1.subtract(collection2);

//print(collection42)
var collectionS = ee.ImageCollection([collection02,collection12,collection22,collection32,collection42,collection52,collection62]);
var colectionS2=collectionS.select(['constant_median', 'avg_rad_median']).reduce(ee.Reducer.linearFit())

var colectionS3=collectionS.select(['constant_median', 'avg_rad_median']).reduce(ee.Reducer.mean());
var WA2015=ee.Image('users/pmisson/World_Atlas_2015');

var WA2015 =WA2015.reproject(ee.Projection('EPSG:4326'),null, 400);
var colectionS3 =colectionS3.select('avg_rad_median_mean').reproject(ee.Projection('EPSG:4326'),null, 400);
var colectionS5=colectionS3.select('avg_rad_median_mean').subtract(WA2015.select("b1"));
var masksources=colectionS5.gte(maxval)
var masksources2=colectionS5.lte(5)
var masksources2= masksources2.multiply(masksources);
var maskcities=colectionS5.lte(1);
var colectionS6=colectionS5.multiply(maskcities);
colectionS6=colectionS6.divide(albedo02);
var mask=1;
// Visualize brightness in green and a linear fit trend line in red/blue.
if (mask){
collection02 = collection02.multiply(masksources);
collection12 = collection12.multiply(masksources);
collection22 = collection22.multiply(masksources);
collection32 = collection32.multiply(masksources);
collection42 = collection42.multiply(masksources);
collection52 = collection52.multiply(masksources);
collection62 = collection62.multiply(masksources);
}

var collectionS = ee.ImageCollection([collection02,collection12,collection22,collection32,collection42,collection52,collection62]);
var linearFit = collectionS.select(['constant_median', 'avg_rad_median'])
  .reduce(ee.Reducer.linearFit());

var scalerel=linearFit.select(['scale']).divide(linearFit.select(['offset']));
var linearFit2=linearFit.addBands(scalerel);
//var linearFit3=linearFit2.filter(ee.Filter.lq(linearFit.select(['offset'], 1));
print(collection52)
var canny = collection02.select(['avg_rad_median']).gte(0.27);
print(canny)
var linearFit3=linearFit2.multiply(canny.select(['avg_rad_median']));


Map.addLayer(
    linearFit3,
    {min: [0, 0, 0], max: [0.1, 1, -0.1], bands: ['scale', 'offset', 'scale_1']},
    'stable lights trend');
var vizParams = {
  bands: ['avg_rad_median'],
  min: 0.4,
  max: 100,
  gamma: 2.0,
};
var vizParams2 = {
  bands: ['avg_vis'],
  min: 0.4,
  max: 100,
  gamma: 2.0,
};

var vizParams3 = {
  bands: ['avg_rad_median_mean'],
  min: 0.27,
  max: 1,
  gamma: 9.0,
};


//var VIIRS=collectionS3.select(['avg_rad_median_mean']).log10();
// Compute the EVI using an expression.
//var evi = image.expression(
//  '20.3-1.3*VIIRS', {
//      'VIIRS': VIIRS
//});
var vizParams2 = {
  bands: ['constant'],
  min: 22,
  max: 17,
  gamma: 3.0,
};
//Map.addLayer(evi,vizParams2,'Skybrightness');

Map.setCenter(-3.7353515625,40.463666324587685, 7);

//Export.image.toDrive({
//  image: linearFit3,
//  description: 'Greenest_pixel_composite',
//  scale: 11
//});


//Export.image.toDrive({
//  image: colectionS3.select('avg_rad_median_mean'),
//  description: 'mapToCloudExample2'
//  region: colectionS3.geometry()
//});




//=====================================================================
// Load and Prep Data
//var maineCounties  = 
//    ee.FeatureCollection('ft:1RCHamIKGMkCKMTJ_IPQ2HjXGCBpKxjuXKOZrp71a')//.filter(ee.Filter.eq('NOMBRE', "Centro"));
var  maineCounties  = 
    ee.FeatureCollection('users/pmisson/NUTS_RG_01M_2016_4326_LEVL_3').filter(ee.Filter.eq('CNTR_CODE', "IT"));
var image2area = ee.Image.pixelArea();
image2area.reproject(ee.Projection('EPSG:4326'),null, 400);
//=====================================================================
//Function

var summarize_viirs = function(feature){

  var viirs_all = collectionS;

  var summarize_viirs_year = function(image, feat){
    feat = ee.Feature(feat);
    image = ee.Image(image);
    var id = image.id();

    var viirs_rad = image.select('avg_rad_median').reproject(ee.Projection('EPSG:4326'),null, 400);
    var viirs_cld = image.select('cf_cvg_median').reproject(ee.Projection('EPSG:4326'),null, 400);

    var viirs_rad2 = viirs_rad.expression('IMA*PIX*1E-9*1E4',{'IMA':viirs_rad.select('avg_rad_median'),'PIX':image2area.select('area')});

    // Mask radiance values with cloud cover
    var viirs_rad3 = viirs_rad2.mask(viirs_cld);

    // Average VIIRS Radiance
    var feature_rad = viirs_rad.reduceRegion({
      geometry: feature.geometry(),
      reducer: ee.Reducer.mean(),
      scale: 400
      });
      
    // Sum VIIRS Radiance
    var feature_rad2 = viirs_rad2.reduceRegion({
      geometry: feature.geometry(),
      reducer: ee.Reducer.sum(),
      scale: 400
      });

    // Area
    var area = image2area.select('area').reduceRegion({
      geometry: feature.geometry(),
      reducer: ee.Reducer.sum(),
      scale: 400
      });      


    // Sum VIIRS Cloud-Free Observations
    var feature_cld = viirs_cld.reduceRegion({
      geometry: feature.geometry(),
      reducer: ee.Reducer.mean(),
      scale: 400
      });       

    var mean_rad = feature_rad.get('avg_rad_median');
    var sum_rad = feature_rad2.get('avg_rad_median');
    var mean_cld = feature_cld.get('cf_cvg_median');

    var year_month = ee.Number(id);
    mean_rad = ee.Number(mean_rad);
    sum_rad = ee.Number(sum_rad);
    mean_cld = ee.Number(mean_cld);
    var area1 = ee.Number(area);
    var area0 = ee.String("area");
    var mean_rad_name = ee.String("viirs_rad_mean_").cat(year_month);
    var sum_rad_name = ee.String("viirs_rad_sum_").cat(year_month);
    var mean_cld_name = ee.String("viirs_cld_mean_").cat(year_month);
    return feat.set(mean_rad_name, mean_rad,sum_rad_name,sum_rad, mean_cld_name, mean_cld,area0, area1);

  };  

  var new_feature = ee.Feature(viirs_all.iterate(summarize_viirs_year, 
      feature));

  return new_feature;

};

//=====================================================================
//Apply Function
var maineCounties_output = maineCounties.map(summarize_viirs);
print(maineCounties_output);

Export.table.toDrive({
  collection: maineCounties_output,
  description:'Countries_'+country+'_GOODX_3_'+maxval+'_'+mask,
  fileFormat: 'CSV'
});
if (0){
Map.addLayer(albedo02);

Map.addLayer(collection22,vizParams,'2014');
Map.addLayer(collection32,vizParams,'2015');
Map.addLayer(collection42,vizParams,'2016');
Map.addLayer(collection52,vizParams,'2017');
Map.addLayer(collection62,vizParams,'2018');
Map.addLayer(colectionS3,vizParams3,'2012-2017');
Map.addLayer(masksources,vizParams3,'sources');
Map.addLayer(masksources2,vizParams3,'sources2');
Map.addLayer(colectionS6,vizParams3,'albedo_residuals');
//Map.addLayer(F162010_c1a,vizParams2,'2011');


//Map.addLayer(image5,'ISS');
}
Map.addLayer(collection02,vizParams,'2012');
Map.addLayer(collection12,vizParams,'2013');
