import 'dart:math' as math;
import 'package:source_span/source_span.dart';
import '../token.dart';
import 'input_value.dart';

class NumberValueContext extends InputValueContext<num> {
  final Token NUMBER;

  NumberValueContext(this.NUMBER);

  num get numberValue {
    var text = NUMBER.text;
    if (!text.contains('E') && !text.contains('e')) {
      return num.parse(text);
    } else {
      var split = text.split(text.contains('E') ? 'E' : 'e');
      var base = num.parse(split[0]);
      var exp = num.parse(split[1]);
      return base * math.pow(10, exp);
    }
  }

  @override
  FileSpan get span => NUMBER.span;

  @override
  num computeValue(Map<String, dynamic> variables) => numberValue;
}