import { platform } from 'os';
import { dirname, join } from 'path';
import { promises } from 'fs';

const { mkdir } = promises;

const getDirectory = () => {
  const target = platform();

  switch (target) {
    case 'win32':
      return process.env.APPDATA;

    case 'darwin':
      return join(process.env.HOME, 'Library', 'Preferences');

    case 'linux':
      return join(process.env.HOME, '.cache');

    default:
      throw new Error('Unsupported platform: ' + target);
  }
};

export class Appdata {
  constructor(private path: string = join(getDirectory(), 'devoirs')) {}

  async get(): Promise<string> {
    await mkdir(dirname(this.path)).catch((e: NodeJS.ErrnoException) => {
      if (e.code === 'EEXIST') {
        return;
      }

      throw e;
    });

    return this.path;
  }
}