// Copyright (c) 2025, 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 'objective_c_bindings_generated.dart';

extension IntToNSNumber on int {
  NSNumber toNSNumber() => NSNumberCreation.numberWithLongLong(this);
}

extension DoubleToNSNumber on double {
  NSNumber toNSNumber() => NSNumberCreation.numberWithDouble(this);
}

extension NumToNSNumber on num {
  NSNumber toNSNumber() {
    final value = this;
    return switch (value) {
      int() => NSNumberCreation.numberWithLongLong(value),
      double() => NSNumberCreation.numberWithDouble(value),
    };
  }
}

extension BoolToNSNumber on bool {
  NSNumber toNSNumber() => NSNumberCreation.numberWithBool(this);
}

extension NSNumberToNum on NSNumber {
  num get numValue => isFloat ? doubleValue : longLongValue;
}
