// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*
 The string values of the names of the tints and accents are required in two places:
   - in the definitions of the API names (such as MDCPaletteTint500Name)
   - in the private implementation, for example, to check incoming strings are correct.

 We can't have both the public and the private implementations depending on each other, since that
 would cause a dependency loop. The normal solution to a dependency loop is to factor out the
 common part into a new "unit" and have both of the original implementations depend on this new
 unit. In this case, the string values would get factored out into the new unit.

 However, the code in question is initializing constant data (the strings), the definitions must use
 compile-time constants. For example, if we factored out the string values as "internal" names, the
 following would still not work because the initialization doesn't use compile-time constants.

 ```objective-c
 static const NSString *MDCPaletteTint500Name = MDCPaletteTint500InternalName;
 ```

 To get around this, we instead drop down a level and define the strings in the preprocessor, so
 that the compiler still sees compile-time constants. This has the downside of possibly duplicating
 strings if the compiler can't optimize string storage across compilation units.
 */

#import <Foundation/Foundation.h>

API_DEPRECATED_BEGIN("🤖👀 Use go/material-ios-branding APIs instead. "
                     "See go/material-ios-tokens guidance for more details. "
                     "This has go/material-ios-migrations#scriptable-potential 🤖👀",
                     ios(12, 12))

#define MDC_PALETTE_TINT_50_INTERNAL_NAME @"50"
#define MDC_PALETTE_TINT_100_INTERNAL_NAME @"100"
#define MDC_PALETTE_TINT_200_INTERNAL_NAME @"200"
#define MDC_PALETTE_TINT_300_INTERNAL_NAME @"300"
#define MDC_PALETTE_TINT_400_INTERNAL_NAME @"400"
#define MDC_PALETTE_TINT_500_INTERNAL_NAME @"500"
#define MDC_PALETTE_TINT_600_INTERNAL_NAME @"600"
#define MDC_PALETTE_TINT_700_INTERNAL_NAME @"700"
#define MDC_PALETTE_TINT_800_INTERNAL_NAME @"800"
#define MDC_PALETTE_TINT_900_INTERNAL_NAME @"900"
#define MDC_PALETTE_ACCENT_100_INTERNAL_NAME @"A100"
#define MDC_PALETTE_ACCENT_200_INTERNAL_NAME @"A200"
#define MDC_PALETTE_ACCENT_400_INTERNAL_NAME @"A400"
#define MDC_PALETTE_ACCENT_700_INTERNAL_NAME @"A700"

/** Return YES if a string is one of the pre-defined tint/accent names. */
BOOL MDCPaletteIsTintOrAccentName(NSString* _Nonnull name);

API_DEPRECATED_END
