// リスト4-16
const fs = require('fs');
const { prompt } = require('./mymodule');
let data = []; // データ配列
let fname = './messages.json'; // データファイル 
let flg = true; // ループの終了フラグ
// メイン処理
async function main() {
	let opt = { encoding: 'utf8' }
	let bf = fs.readFileSync(fname, opt);
	data = JSON.parse(bf.toString('utf8'));
	while (flg) {
		let cmd = await prompt('cmd(a/d/f/q)');
		switch (cmd.toString()) {
			case 'a':
				await add(); break;
			case 'd':
				await del(); break;
			case 'f':
				await find(); break;
			case 'q':
				quit(); break;
			default:
				console.log('no-command.');
		}
	}
}
// メッセージの追加
async function add() {
	let bf = await prompt('type message: ');
	let msg = bf.toString('utf8');
	let item = {
		date: new Date(),
		message: msg
	}
	data.unshift(item);
	console.log('message added.');
}
// メッセージの削除
async function del() {
	let bf = await prompt('type number: ');
	let num = +bf.toString();
	console.log('item: ' + data[num].message);
	bf = await prompt('delete it? (y/n):');
	if (bf.toString() == 'y') {
		data.splice(num, 1);
	}
}
// メッセージの検索
async function find() {
	let bf = await prompt('find: ');
	let find = bf.toString('utf8');
	for (let i in data) {
		if (data[i].message.indexOf(find) > -1) {
			console.log(i + ': ' + data[i].message);
		}
	}
}

// スクリプトの終了
function quit() {
	flg = false;
	let opt = { encoding: 'utf8' }
	fs.writeFileSync(fname, JSON.stringify(data, '', 2), opt, (err) => {
		if (err) {
			console.error(err.message);
			return;
		}
		console.log('quit now!');
	});
}
main(); // メイン処理の実行