import { constants } from 'fs';
import { platform } from 'os';
import { join } from 'path';

import { createChromiumContext } from './context';
import { chmodDirectory } from '../../utils/fs';
import { ResourceResolver } from '../resource/resolver';

const {
  S_IRUSR,
  S_IWUSR,
  S_IXUSR,
  S_IRGRP,
  S_IXGRP,
  S_IROTH,
  S_IXOTH,
} = constants;

export class ChromiumResolver {
  constructor(private resolver: ResourceResolver) {}

  async resolve(): Promise<string> {
    const context = createChromiumContext();
    const chromiumDirectory = context.directory;
    const temporaryDirectory = await this.resolver.resolve(chromiumDirectory);
    const executable = join(temporaryDirectory, context.executable);

    if (platform() !== 'win32') {
      // Change mode to `rwx r-x r-x`
      await chmodDirectory(
        temporaryDirectory,
        S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH // 755
      );
    }

    return executable;
  }
}