// 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.

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;
}
