// Copyright © 2022 Olo Inc. All rights reserved.
// This software is made available under the Olo Pay SDK License (See LICENSE.md file)
//
//  DataKeys.swift
//  OlopaysdkReactNative
//
//  Created by Justin Anderson on 1/19/23.
//

import Foundation

public class DataKeys {
    
    // SDK Initialization Keys
    public static let ProductionEnvironmentKey = "productionEnvironment"
    public static let ApplePayMerchantIdKey = "applePayMerchantId"
    public static let IsInitializedKey = "isInitialized"
    public static let HybridSdkVersionKey = "version"
    public static let HybridBuildTypeKey = "buildType"
    public static let HybridBuildTypePublicValue = "Public"
    public static let HybridBuildTypeInternalValue = "Internal"

    // Digital Wallet Payment Method Request Keys
    public static let ApplePayConfigParameterKey = "applePayConfig"
    public static let ApplePayAmountKey = "amount"
    public static let ApplePayCountryCodeKey = "countryCode"
    public static let ApplePayCurrencyCodeKey = "currencyCode"
    public static let ApplePayMerchantIdParameterKey = "merchantId"
    public static let ApplePayCompanyLabelParameterKey = "companyLabel"
    public static let DigitalWalletConfigParameterKey = "digitalWalletConfig"
    public static let DigitalWalletFullBillingAddressRequiredParameterKey = "fullBillingAddressRequired"
    public static let DigitalWalletPhoneNumberRequiredParameterKey = "phoneNumberRequired"
    public static let DigitalWalletFullNameRequiredParameterKey = "fullNameRequired"
    public static let DigitalWalletFullPhoneticNameRequiredParameterKey = "fullPhoneticNameRequired"
    public static let DigitalWalletEmailRequiredParameterKey = "emailRequired"

    // Payment Method Keys
    public static let PaymentMethodKey = "paymentMethod"
    public static let IDKey = "id"
    public static let Last4Key = "last4"
    public static let CardTypeKey = "cardType"
    public static let ExpirationMonthKey = "expMonth"
    public static let ExpirationYearKey = "expYear"
    public static let PostalCodeKey = "postalCode"
    public static let CountryCodeKey = "countryCode"
    public static let EmailKey = "email"
    public static let DigitalWalletCardDescriptionKey = "digitalWalletCardDescription"
    public static let BillingAddressKey = "billingAddress"
    public static let FullNameKey = "fullName"
    public static let FullPhoneticNameKey = "fullPhoneticName"
    public static let PhoneNumberKey = "phoneNumber"
    public static let IsDigitalWalletKey = "isDigitalWallet"

    // Address Keys
    public static let Address1Key = "address1"
    public static let Address2Key = "address2"
    public static let Address3Key = "address3"
    public static let LocalityKey = "locality"
    public static let AdministrativeAreaKey = "administrativeArea"
    public static let SortingCodeKey = "sortingCode"

    // OnCardChange Keys
    public static let InvalidFieldsKey = "invalidFields"
    public static let EmptyFieldsKey = "emptyFields"
    public static let ErrorsKey = "errors"
    public static let EditedFieldsErrorKey = "editedFieldsError"
    public static let AllFieldsErrorKey = "allFieldsError"

    // OnFocusField Keys
    public static let FieldKey = "field"

    // CvvDetailsChangedEvent Keys
    public static let EditedFieldErrorKey = "editedFieldError"
    public static let UneditedFieldErrorKey = "uneditedFieldError"

    // Field State Keys
    public static let StateKey = "state"
    public static let IsEmptyKey = "isEmpty"
    public static let isFocusedKey = "isFocused"
    public static let IsValidKey = "isValid"
    public static let WasEditedKey = "wasEdited"
    public static let WasFocusedKey = "wasFocused"

    // View Style Keys
    public static let BorderWidthKey = "borderWidth"
    public static let BackgroundColorKey = "backgroundColor"
    public static let BorderColorKey = "borderColor"
    public static let CornerRadiusKey = "cornerRadius"
    public static let CursorColorKey = "cursorColor"
    public static let TextColorKey = "textColor"
    public static let ErrorTextColorKey = "errorTextColor"
    public static let PlaceholderColorKey = "placeholderColor"
    public static let FontSizeKey = "fontSize"
    public static let FontFamilyKey = "fontFamily"
    public static let NumberPlaceholderKey = "number"
    public static let ExpirationPlaceholderKey = "expiration"
    public static let CvvPlaceholderKey = "cvv"
    public static let PostalCodePlaceholderKey = "postalCode"
    public static let CvvTextPaddingLeftInsetKey = "textPaddingLeft"
    public static let CvvTextPaddingRightInsetKey = "textPaddingRight"
    public static let TextAlignKey = "textAlign"

    // Events
    public static let DigitalWalletReadyEvent = "digitalWalletReadyEvent"
    public static let DigitalWalletIsReadyKey = "isReady"

    // Result Event Keys
    public static let CvvTokenKey = "token"
    public static let ErrorKey = "error"
    public static let MessageKey = "message"
    public static let CodeKey = "code"

    // Field Keys
    public static let CardNumberFieldKey = "cardNumber"
    public static let ExpirationFieldKey = "expiration"
    public static let CvvFieldKey = "cvv"
    public static let PostalCodeFieldKey = "postalCode"
    public static let FocusedFieldKey = "focusedField"

    // State Values
    public static let ValidStateValue = "valid"
    public static let InvalidStateValue = "invalid"

    // Component Method Call Rejection Code Keys
    public static let ViewNotFoundErrorCode = "ViewNotFound"

    // Error Types
    public static let emptyErrorKey = "emptyError"
    public static let invalidErrorKey = "invalidError"

    // Custom Error Message Keys
    public static let unsupportedCardErrorKey = "unsupportedCardError"

    // Alignment keys
    public static let AlignmentCenterKey = "center"
    public static let AlignmentRightKey = "right"

    // Apple Pay Button Keys
    public static let ApplePayButtonStyle = "style"
    public static let ApplePayButtonType = "type"

    // Apple Pay Button Style Keys
    public static let ApplePayButtonStyleWhite = "white"
    public static let ApplePayButtonStyleWhiteOutline = "whiteOutline"
    public static let ApplePayButtonStyleBlack = "black"
    public static let ApplePayButtonStyleAutomatic = "automatic"

    // Apple Pay Button Type Keys
    public static let ApplePayButtonTypePlain = "plain"
    public static let ApplePayButtonTypeBuy = "buy"
    public static let ApplePayButtonTypeAddMoney = "addMoney"
    public static let ApplePayButtonTypeBook = "book"
    public static let ApplePayButtonTypeCheckout = "checkout"
    public static let ApplePayButtonTypeContinue = "continue"
    public static let ApplePayButtonTypeContribute = "contribute"
    public static let ApplePayButtonTypeDonate = "donate"
    public static let ApplePayButtonTypeInStore = "inStore"
    public static let ApplePayButtonTypeOrder = "order"
    public static let ApplePayButtonTypeReload = "reload"
    public static let ApplePayButtonTypeRent = "rent"
    public static let ApplePayButtonTypeSetUp = "setUp"
    public static let ApplePayButtonTypeSubscribe = "subscribe"
    public static let ApplePayButtonTypeSupport = "support"
    public static let ApplePayButtonTypeTip = "tip"
    public static let ApplePayButtonTypeTopUp = "topUp"

    // Line Items Keys
    public static let LineItemsKey = "lineItems"
    public static let ValidateLineItemsKey = "validateLineItems"
    public static let LineItemLabelKey = "label"
    public static let LineItemAmountKey = "amount"
    public static let LineItemTypeKey = "type"
    public static let LineItemStatusKey = "status"
    public static let LineItemFinalStatusKey = "Final"
    public static let LineItemPendingStatusKey = "Pending"

    //Line Item Type Keys
    public static let LineItemTypeKeys = ["Tax", "Subtotal", "LineItem"]
}
