import 'package:fxutils/fxutils.dart';
import 'package:path/path.dart' as p;

/// Convenience class for tests which returns values vaguely of the same
/// structure as real values, but never suitable for any actual work. This can
/// only safely be used by tests making sure they *would* do work correctly,
/// without having to repeatedly instantiate the same fakes over and over.
class FakeFxEnv extends IFxEnv {
  final String _cwd;
  final String _fuchsiaDir;
  final EnvReader _envReader;

  FakeFxEnv({
    String fuchsiaDir = '/root/fuchsia',
    String cwd = '/cwd',
    EnvReader envReader,
  })  : _envReader = envReader,
        _fuchsiaDir = fuchsiaDir,
        _cwd = cwd;

  static final FakeFxEnv shared = FakeFxEnv();

  @override
  String get cwd => _cwd;

  @override
  String get fuchsiaArch => 'x86';

  @override
  String get fuchsiaDir => _fuchsiaDir;

  @override
  String get hostOutDir => p.join(fuchsiaDir, 'out/default/host_$fuchsiaArch');

  @override
  String get outputDir => p.join(fuchsiaDir, 'out/default');

  @override
  String get sshKey => p.join(fuchsiaDir, 'out/default/.ssh/pkey');

  @override
  String get zirconBuildRoot => outputDir;

  @override
  String get zirconToolsDir => p.join(zirconBuildRoot, 'tools');

  @override
  String getEnv(String variableName, [String defaultValue]) =>
      _envReader.getEnv(variableName, defaultValue);
}
