"use strict";

import fs from 'fs';

/**
 * Represents a list of categories.
 */
class Categories {
	constructor(in_filename) {
		this.filename = in_filename;
		if(!fs.existsSync(this.filename))
			throw new Exception(`Error: No such file or directory '${this.filename}' (it should exist and have 1 category name per line).`);
		
		/**
		 * A list of category names.
		 * @type {string[]}
		 */
		this.values = fs.readFileSync(this.filename, "utf-8")
			.replace(/\r\n?/, "\n")
			.split("\n")
			.map((line) => line.trim())
			.filter((line) => line.length > 0);
		
		/**
		 * The total number of categories.
		 * @type {Number}
		 */
		this.count = this.values.length;
	}
	
	to_id(cat_name) {
		return this.values.indexOf(cat_name);
	}
	
	to_name(id) {
		return this.values[id];
	}
}

export default Categories;
