var country= "UK"

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

var summarize_viirs = function(feature){

  var viirs_all = ee.ImageCollection('NOAA/DMSP-OLS/CALIBRATED_LIGHTS_V4');

  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_vis').reproject(ee.Projection('EPSG:4326'),null, 400);
    var viirs_cld = image.select('cf_cvg').reproject(ee.Projection('EPSG:4326'),null, 400);

    var viirs_rad2 = viirs_rad.expression('IMA*PIX',{'IMA':viirs_rad.select('avg_vis'),'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_vis');
    var sum_rad = feature_rad2.get('avg_vis');
    var mean_cld = feature_cld.get('cf_cvg');

    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("dmsp_dn_mean_").cat(year_month);
    var sum_rad_name = ee.String("dmsp_dn_sum_").cat(year_month);
    var mean_cld_name = ee.String("dmsp_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:'DMSPCALNUTs3'+country+'_GOOD2',
  fileFormat: 'CSV'
});

var vizParams = {
  bands: ['avg_vis'],
  min: 0.4,
  max: 100,
  gamma: 2.0,
  };
Map.addLayer(imageCollection2.first(),vizParams,'DMSPcal');
