export 'package:core_generator/src/field_types/bool_field_type.dart';
export 'package:core_generator/src/field_types/color_field_type.dart';
export 'package:core_generator/src/field_types/double_field_type.dart';
export 'package:core_generator/src/field_types/string_field_type.dart';
export 'package:core_generator/src/field_types/uint_field_type.dart';

Map<String, FieldType> _types = <String, FieldType>{};

abstract class FieldType {
  final String name;
  String _cppName;
  final String include;
  String get cppName => _cppName;
  String get cppGetterName => _cppName;

  String _runtimeCoreType;
  String get runtimeCoreType => _runtimeCoreType;

  FieldType(
    this.name,
    String runtimeCoreType, {
    String cppName,
    this.include,
  }) {
    _cppName = cppName ?? name;
    _runtimeCoreType = runtimeCoreType;
    _types[name] = this;
  }

  static FieldType find(dynamic key) {
    if (key is! String) {
      return null;
    }
    return _types[key];
  }

  @override
  String toString() {
    return name;
  }

  String equalityCheck(String varAName, String varBName) {
    return "$varAName == $varBName";
  }

  String get defaultValue => null;

  String get uncapitalizedName => '${name[0].toLowerCase()}${name.substring(1)}'
      .replaceAll('<', '')
      .replaceAll('>', '');

  String get capitalizedName => '${name[0].toUpperCase()}${name.substring(1)}'
      .replaceAll('<', '')
      .replaceAll('>', '');

  String get snakeName => name
      .replaceAllMapped(RegExp('(.+?)([A-Z])'), (Match m) => '${m[1]}_${m[2]}')
      .toLowerCase();

  String get snakeRuntimeCoreName => _runtimeCoreType
      .replaceAllMapped(RegExp('(.+?)([A-Z])'), (Match m) => '${m[1]}_${m[2]}')
      .toLowerCase();

  String convertCpp(String value) => value;
}
