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

const addNote = (title, body) => {
  const notes = loadNotes();
  const duplicateNote = notes.find((note) => note.title === title);

  if (!duplicateNote) {
    notes.push({
      title: title,
      body: body
    });

    saveNotes(notes);
    console.log(chalk.bgGreen.bold('New note added!'));
  } else {
    console.log(chalk.bgRed.bold('Note title taken!'));
  }
}

const removeNote = (title) => {
  const notes = loadNotes();
  const notesToKeep = notes.filter((note) => note.title !== title);

  if (notes.length > notesToKeep.length) {
    console.log(chalk.bgGreen.bold('Note removed!'));
    saveNotes(notesToKeep);
  } else {
    console.log(chalk.bgRed.bold('No note found!'));
  }
}

const listNotes = () => {
  const notes = loadNotes();

  console.log(chalk.cyan.underline('Your notes:'));
  notes.forEach((note) => {
    console.log(note.title);
  });
}

const saveNotes = (notes) => {
  const dataJSON = JSON.stringify(notes);
  fs.writeFileSync('notes.json', dataJSON);
}

const readNote = (title) => {
  const notes = loadNotes();
  const note = notes.find((note) => note.title === title);

  if (note) {
    console.log(chalk.cyan.underline(note.title));
    console.log(note.body);
  } else {
    console.log(chalk.bgRed.bold('No note found!'));
  }
}

const loadNotes = () => {
  try {
    const dataBuffer = fs.readFileSync('notes.json');
    const dataJSON = dataBuffer.toString();
    return JSON.parse(dataJSON);
  } catch (e) {
    return [];
  }
}

module.exports = {
  addNote: addNote,
  removeNote: removeNote,
  listNotes: listNotes,
  readNote: readNote
}