const fs = require('fs');
const path = require('path');

const fetch = require('node-fetch'); // For CommonJS
const { start } = require('repl');
const request = require('request');
let { render } = require("mustache");

const DATA_INPUT_FOLDER = './input';
const DATA_OUTPUT_FOLDER = './output';
const TEMPLATES_FOLDER = './templates';

function generateMarkdown(type) {
  const folderPath = `${DATA_INPUT_FOLDER}/${type}`;
  const files = fs.readdirSync(folderPath);
  const jsonFiles = files.filter(file => file.endsWith('.json'));

  const summary = [];

  jsonFiles.forEach(file => {
    const startYear = path.basename(file, '.json');
    const filePath = path.join(folderPath, file);
    const content = fs.readFileSync(filePath, 'utf8');
    const data = JSON.parse(content);

    //Init year for summaries
    yearObject = {};
    yearObject.year = startYear;
    yearObject.count = data.length;
    //Init months object for summary
    let months = {};

    let template = fs.readFileSync(`./${TEMPLATES_FOLDER}/${type}.md`).toString()

    data.map((conference) => {
      let month = conference.date.substring(5, 7);
      let output = render(template, conference)

      if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}`)) {
        fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}`);
      }

      if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}`)) {
        fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}`);
      }

      if (!fs.existsSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}`)) {
        fs.mkdirSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}`);
      }
      fs.writeFileSync(`./${DATA_OUTPUT_FOLDER}/${type}/${startYear}/${month}/${conference.date}-${conference.activity}.md`, output)

      //Add month count for summary
      const m = conference.date.substring(5,7);
       if( !months.hasOwnProperty( m ) ){
            months[m] = []
       }
       months[m].push( m )
    })

    let monthsArray = [];
    
    for ( const month in months) {
        let mObject = {};
        mObject.month = month;
        mObject.count = months[month].length;
        monthsArray.push( mObject );
    }

    //Sort monthsarray
    monthsArray.sort((a,b) => b.month - a.month); // b - a for reverse sort

    yearObject.months = monthsArray;

    summary.push( yearObject );

  })

  fs.writeFileSync(`./${DATA_OUTPUT_FOLDER}/${type}/${type}.json`, JSON.stringify(summary.reverse(), null, 2));
  console.log(`Summary created successfully.`);
}

async function generateJson( type, year ) {
  let options = { json: true };

  let fields = [];
  fields['conferences'] = [
    'date_updated',
    'title',
    'date',
    'activity',
    'place',
    'city',
    'state',
    'country',
    'duration',
    'thumbnail',
    'translations.languages_code',
    'translations.youtube',
    'translations.video',
    'translations.audio',
    'translations.pdf',
    'translations.pdf_simple',
    'translations.text_published'
  ]

  fields['activities'] = [
    'title',
    'date',
    'activity',
    'place',
    'city',
    'state',
    'country',
    'duration',
    'thumbnail',
    'draft',
    'translations.languages_code',
    'translations.youtube',
    'translations.mp3',
    'translations.pdf',
    'translations.pdf_booklet',
    'translations.interventions.text',
    'translations.date_updated'
  ]

  let url = `https://directus.carpa.com/items/${type}?fields=${fields[type].join(",")}&deep[translations][_filter][languages_code][_eq]=es&filter[year(date)]=${year}&access_token=dUILDpE5gV224XqOB5xUTzE69sk8VSOL&limit=1000&sort=-date`;

  if(type=='conferences'){
    url = url + '&filter[public]=true'
  }

  request(url, options, (error, res, body) => {
    if (error) {
      return console.log(error)
    };

    if (!error && res.statusCode == 200) {
      // do something with JSON, using the 'body' variable
      if (!fs.existsSync(`./${DATA_INPUT_FOLDER}/${type}`)) {
        fs.mkdirSync(`./${DATA_INPUT_FOLDER}/${type}`);
      }

      fs.writeFile(`./${DATA_INPUT_FOLDER}/${type}/${year}.json`, JSON.stringify(body.data), (err) => {
        if (err) {
          console.error("Error writing file:", err);
          return;
        }
        console.log("File has been written successfully!");
      });
    };
  });

}


//generateJson( 'conferences', 2014 );
//generateJson( 'activities' , 2021 );

// setTimeout( () => {
//   generateMarkdown( 'conferences' )
// }, 5000 );
//generateMarkdown( 'activities' );

generateMarkdown( 'conferences' );
// for( let year = 1974; year < 2019; year++){
//   generateJson( 'conferences', year );
//   setTimeout(()=>{console.log('Year :' & year)},2000);
// }