// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart=2.10
import 'error_codes_internal.dart'
    if (dart.library.io) 'error_codes_dart_io.dart';

/// Operating system error codes.
// TODO(tvolkert): Remove (https://github.com/dart-lang/sdk/issues/28860)
class ErrorCodes {
  ErrorCodes._();

  /// Argument list too long
  // ignore: non_constant_identifier_names
  static int get E2BIG => _platform((_Codes codes) => codes.e2big);

  /// Permission denied
  // ignore: non_constant_identifier_names
  static int get EACCES => _platform((_Codes codes) => codes.eacces);

  /// Try again
  // ignore: non_constant_identifier_names
  static int get EAGAIN => _platform((_Codes codes) => codes.eagain);

  /// Bad file number
  // ignore: non_constant_identifier_names
  static int get EBADF => _platform((_Codes codes) => codes.ebadf);

  /// Device or resource busy
  // ignore: non_constant_identifier_names
  static int get EBUSY => _platform((_Codes codes) => codes.ebusy);

  /// No child processes
  // ignore: non_constant_identifier_names
  static int get ECHILD => _platform((_Codes codes) => codes.echild);

  /// Resource deadlock would occur
  // ignore: non_constant_identifier_names
  static int get EDEADLK => _platform((_Codes codes) => codes.edeadlk);

  /// Math argument out of domain of func
  // ignore: non_constant_identifier_names
  static int get EDOM => _platform((_Codes codes) => codes.edom);

  /// File exists
  // ignore: non_constant_identifier_names
  static int get EEXIST => _platform((_Codes codes) => codes.eexist);

  /// Bad address
  // ignore: non_constant_identifier_names
  static int get EFAULT => _platform((_Codes codes) => codes.efault);

  /// File too large
  // ignore: non_constant_identifier_names
  static int get EFBIG => _platform((_Codes codes) => codes.efbig);

  /// Illegal byte sequence
  // ignore: non_constant_identifier_names
  static int get EILSEQ => _platform((_Codes codes) => codes.eilseq);

  /// Interrupted system call
  // ignore: non_constant_identifier_names
  static int get EINTR => _platform((_Codes codes) => codes.eintr);

  /// Invalid argument
  // ignore: non_constant_identifier_names
  static int get EINVAL => _platform((_Codes codes) => codes.einval);

  /// I/O error
  // ignore: non_constant_identifier_names
  static int get EIO => _platform((_Codes codes) => codes.eio);

  /// Is a directory
  // ignore: non_constant_identifier_names
  static int get EISDIR => _platform((_Codes codes) => codes.eisdir);

  /// Too many levels of symbolic links
  // ignore: non_constant_identifier_names
  static int get ELOOP => _platform((_Codes codes) => codes.eloop);

  /// Too many open files
  // ignore: non_constant_identifier_names
  static int get EMFILE => _platform((_Codes codes) => codes.emfile);

  /// Too many links
  // ignore: non_constant_identifier_names
  static int get EMLINK => _platform((_Codes codes) => codes.emlink);

  /// File name too long
  // ignore: non_constant_identifier_names
  static int get ENAMETOOLONG =>
      _platform((_Codes codes) => codes.enametoolong);

  /// File table overflow
  // ignore: non_constant_identifier_names
  static int get ENFILE => _platform((_Codes codes) => codes.enfile);

  /// No such device
  // ignore: non_constant_identifier_names
  static int get ENODEV => _platform((_Codes codes) => codes.enodev);

  /// No such file or directory
  // ignore: non_constant_identifier_names
  static int get ENOENT => _platform((_Codes codes) => codes.enoent);

  /// Exec format error
  // ignore: non_constant_identifier_names
  static int get ENOEXEC => _platform((_Codes codes) => codes.enoexec);

  /// No record locks available
  // ignore: non_constant_identifier_names
  static int get ENOLCK => _platform((_Codes codes) => codes.enolck);

  /// Out of memory
  // ignore: non_constant_identifier_names
  static int get ENOMEM => _platform((_Codes codes) => codes.enomem);

  /// No space left on device
  // ignore: non_constant_identifier_names
  static int get ENOSPC => _platform((_Codes codes) => codes.enospc);

  /// Function not implemented
  // ignore: non_constant_identifier_names
  static int get ENOSYS => _platform((_Codes codes) => codes.enosys);

  /// Not a directory
  // ignore: non_constant_identifier_names
  static int get ENOTDIR => _platform((_Codes codes) => codes.enotdir);

  /// Directory not empty
  // ignore: non_constant_identifier_names
  static int get ENOTEMPTY => _platform((_Codes codes) => codes.enotempty);

  /// Not a typewriter
  // ignore: non_constant_identifier_names
  static int get ENOTTY => _platform((_Codes codes) => codes.enotty);

  /// No such device or address
  // ignore: non_constant_identifier_names
  static int get ENXIO => _platform((_Codes codes) => codes.enxio);

  /// Operation not permitted
  // ignore: non_constant_identifier_names
  static int get EPERM => _platform((_Codes codes) => codes.eperm);

  /// Broken pipe
  // ignore: non_constant_identifier_names
  static int get EPIPE => _platform((_Codes codes) => codes.epipe);

  /// Math result not representable
  // ignore: non_constant_identifier_names
  static int get ERANGE => _platform((_Codes codes) => codes.erange);

  /// Read-only file system
  // ignore: non_constant_identifier_names
  static int get EROFS => _platform((_Codes codes) => codes.erofs);

  /// Illegal seek
  // ignore: non_constant_identifier_names
  static int get ESPIPE => _platform((_Codes codes) => codes.espipe);

  /// No such process
  // ignore: non_constant_identifier_names
  static int get ESRCH => _platform((_Codes codes) => codes.esrch);

  /// Cross-device link
  // ignore: non_constant_identifier_names
  static int get EXDEV => _platform((_Codes codes) => codes.exdev);

  static int _platform(int getCode(_Codes codes)) {
    _Codes codes = (_platforms[operatingSystem] ?? _platforms['linux'])!;
    return getCode(codes);
  }
}

const Map<String, _Codes> _platforms = <String, _Codes>{
  'linux': _LinuxCodes(),
  'macos': _MacOSCodes(),
  'windows': _WindowsCodes(),
};

abstract class _Codes {
  int get e2big;
  int get eacces;
  int get eagain;
  int get ebadf;
  int get ebusy;
  int get echild;
  int get edeadlk;
  int get edom;
  int get eexist;
  int get efault;
  int get efbig;
  int get eilseq;
  int get eintr;
  int get einval;
  int get eio;
  int get eisdir;
  int get eloop;
  int get emfile;
  int get emlink;
  int get enametoolong;
  int get enfile;
  int get enodev;
  int get enoent;
  int get enoexec;
  int get enolck;
  int get enomem;
  int get enospc;
  int get enosys;
  int get enotdir;
  int get enotempty;
  int get enotty;
  int get enxio;
  int get eperm;
  int get epipe;
  int get erange;
  int get erofs;
  int get espipe;
  int get esrch;
  int get exdev;
}

class _LinuxCodes implements _Codes {
  const _LinuxCodes();

  @override
  int get e2big => 7;

  @override
  int get eacces => 13;

  @override
  int get eagain => 11;

  @override
  int get ebadf => 9;

  @override
  int get ebusy => 16;

  @override
  int get echild => 10;

  @override
  int get edeadlk => 35;

  @override
  int get edom => 33;

  @override
  int get eexist => 17;

  @override
  int get efault => 14;

  @override
  int get efbig => 27;

  @override
  int get eilseq => 84;

  @override
  int get eintr => 4;

  @override
  int get einval => 22;

  @override
  int get eio => 5;

  @override
  int get eisdir => 21;

  @override
  int get eloop => 40;

  @override
  int get emfile => 24;

  @override
  int get emlink => 31;

  @override
  int get enametoolong => 36;

  @override
  int get enfile => 23;

  @override
  int get enodev => 19;

  @override
  int get enoent => 2;

  @override
  int get enoexec => 8;

  @override
  int get enolck => 37;

  @override
  int get enomem => 12;

  @override
  int get enospc => 28;

  @override
  int get enosys => 38;

  @override
  int get enotdir => 20;

  @override
  int get enotempty => 39;

  @override
  int get enotty => 25;

  @override
  int get enxio => 6;

  @override
  int get eperm => 1;

  @override
  int get epipe => 32;

  @override
  int get erange => 34;

  @override
  int get erofs => 30;

  @override
  int get espipe => 29;

  @override
  int get esrch => 3;

  @override
  int get exdev => 18;
}

class _MacOSCodes implements _Codes {
  const _MacOSCodes();

  @override
  int get e2big => 7;

  @override
  int get eacces => 13;

  @override
  int get eagain => 35;

  @override
  int get ebadf => 9;

  @override
  int get ebusy => 16;

  @override
  int get echild => 10;

  @override
  int get edeadlk => 11;

  @override
  int get edom => 33;

  @override
  int get eexist => 17;

  @override
  int get efault => 14;

  @override
  int get efbig => 27;

  @override
  int get eilseq => 92;

  @override
  int get eintr => 4;

  @override
  int get einval => 22;

  @override
  int get eio => 5;

  @override
  int get eisdir => 21;

  @override
  int get eloop => 62;

  @override
  int get emfile => 24;

  @override
  int get emlink => 31;

  @override
  int get enametoolong => 63;

  @override
  int get enfile => 23;

  @override
  int get enodev => 19;

  @override
  int get enoent => 2;

  @override
  int get enoexec => 8;

  @override
  int get enolck => 77;

  @override
  int get enomem => 12;

  @override
  int get enospc => 28;

  @override
  int get enosys => 78;

  @override
  int get enotdir => 20;

  @override
  int get enotempty => 66;

  @override
  int get enotty => 25;

  @override
  int get enxio => 6;

  @override
  int get eperm => 1;

  @override
  int get epipe => 32;

  @override
  int get erange => 34;

  @override
  int get erofs => 30;

  @override
  int get espipe => 29;

  @override
  int get esrch => 3;

  @override
  int get exdev => 18;
}

class _WindowsCodes implements _Codes {
  const _WindowsCodes();

  @override
  int get e2big => 7;

  @override
  int get eacces => 13;

  @override
  int get eagain => 11;

  @override
  int get ebadf => 9;

  @override
  int get ebusy => 16;

  @override
  int get echild => 10;

  @override
  int get edeadlk => 36;

  @override
  int get edom => 33;

  @override
  int get eexist => 17;

  @override
  int get efault => 14;

  @override
  int get efbig => 27;

  @override
  int get eilseq => 42;

  @override
  int get eintr => 4;

  @override
  int get einval => 22;

  @override
  int get eio => 5;

  @override
  int get eisdir => 21;

  @override
  int get eloop => -1;

  @override
  int get emfile => 24;

  @override
  int get emlink => 31;

  @override
  int get enametoolong => 38;

  @override
  int get enfile => 23;

  @override
  int get enodev => 19;

  @override
  int get enoent => 2;

  @override
  int get enoexec => 8;

  @override
  int get enolck => 39;

  @override
  int get enomem => 12;

  @override
  int get enospc => 28;

  @override
  int get enosys => 40;

  @override
  int get enotdir => 20;

  @override
  int get enotempty => 41;

  @override
  int get enotty => 25;

  @override
  int get enxio => 6;

  @override
  int get eperm => 1;

  @override
  int get epipe => 32;

  @override
  int get erange => 34;

  @override
  int get erofs => 30;

  @override
  int get espipe => 29;

  @override
  int get esrch => 3;

  @override
  int get exdev => 18;
}
