/*
 * Copyright 2021 Google LLC
 *
 * 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.
 *
 * ---------------------------------------------------------------------
 *
 * Portions of this file were modified and ported to Vala by Victor Vintorez in 2026.
 * These modifications are licensed under the European Union Public License (EUPL),
 * Version 1.2 or later. You may obtain a copy of the License at:
 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
 */

using GLib;

namespace MaterialColorUtilities {
	/** A playful theme - the source color's hue does not appear in the theme. */
	public class SchemeExpressive : DynamicScheme {
		public SchemeExpressive (Hct source_color_hct,
			bool is_dark,
			double contrast_level,
			SpecVersion spec_version = DEFAULT_SPEC_VERSION,
			Platform platform = DEFAULT_PLATFORM,
			Hct[]? source_color_hct_list = null) {
			Hct[] list = source_color_hct_list ?? new Hct[] { source_color_hct };
			Hct first = list[0];

			var specs = ColorSpecs.get_spec (spec_version);

			base (
			      source_color_hct,
			      list,
			      Variant.EXPRESSIVE,
			      is_dark,
			      contrast_level,
			      platform,
			      spec_version,
			      specs.get_primary_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level),
			      specs.get_secondary_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level),
			      specs.get_tertiary_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level),
			      specs.get_neutral_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level),
			      specs.get_neutral_variant_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level),
			      specs.get_error_palette (Variant.EXPRESSIVE, first, is_dark, platform, contrast_level)
			);
		}
	}
}
