part of dart._engine;
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// Maps AutofillHints from the framework to the autofill hints that is used for
/// browsers.
/// See: https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/services/autofill.dart
/// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
class BrowserAutofillHints {
  BrowserAutofillHints._()
    : _flutterToEngineMap = <String, String>{
        'birthday': 'bday',
        'birthdayDay': 'bday-day',
        'birthdayMonth': 'bday-month',
        'birthdayYear': 'bday-year',
        'countryCode': 'country',
        'countryName': 'country-name',
        'creditCardExpirationDate': 'cc-exp',
        'creditCardExpirationMonth': 'cc-exp-month',
        'creditCardExpirationYear': 'cc-exp-year',
        'creditCardFamilyName': 'cc-family-name',
        'creditCardGivenName': 'cc-given-name',
        'creditCardMiddleName': 'cc-additional-name',
        'creditCardName': 'cc-name',
        'creditCardNumber': 'cc-number',
        'creditCardSecurityCode': 'cc-csc',
        'creditCardType': 'cc-type',
        'email': 'email',
        'familyName': 'family-name',
        'fullStreetAddress': 'street-address',
        'gender': 'sex',
        'givenName': 'given-name',
        'impp': 'impp',
        'jobTitle': 'organization-title',
        'language': 'language',
        'middleName': 'additional-name',
        'name': 'name',
        'namePrefix': 'honorific-prefix',
        'nameSuffix': 'honorific-suffix',
        'newPassword': 'new-password',
        'nickname': 'nickname',
        'oneTimeCode': 'one-time-code',
        'organizationName': 'organization',
        'password': 'current-password',
        'photo': 'photo',
        'postalCode': 'postal-code',
        'streetAddressLevel1': 'address-level1',
        'streetAddressLevel2': 'address-level2',
        'streetAddressLevel3': 'address-level3',
        'streetAddressLevel4': 'address-level4',
        'streetAddressLine1': 'address-line1',
        'streetAddressLine2': 'address-line2',
        'streetAddressLine3': 'address-line3',
        'telephoneNumber': 'tel',
        'telephoneNumberAreaCode': 'tel-area-code',
        'telephoneNumberCountryCode': 'tel-country-code',
        'telephoneNumberExtension': 'tel-extension',
        'telephoneNumberLocal': 'tel-local',
        'telephoneNumberLocalPrefix': 'tel-local-prefix',
        'telephoneNumberLocalSuffix': 'tel-local-suffix',
        'telephoneNumberNational': 'tel-national',
        'transactionAmount': 'transaction-amount',
        'transactionCurrency': 'transaction-currency',
        'url': 'url',
        'username': 'username',
      };

  static final BrowserAutofillHints _singletonInstance = BrowserAutofillHints._();

  /// The [BrowserAutofillHints] singleton.
  static BrowserAutofillHints get instance => _singletonInstance;

  final Map<String, String> _flutterToEngineMap;

  /// Converts the Flutter AutofillHint to the autofill hint value used by the
  /// browsers.
  /// See: https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/services/autofill.dart
  /// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete
  String flutterToEngine(String flutterAutofillHint) {
    // Use the hints as it is.
    return _flutterToEngineMap[flutterAutofillHint] ?? flutterAutofillHint;
  }
}
