@use 'sass:map';
@use '../../config';
@use '../../functions' as *;
@use '../../schemas/' as *;
@use '../../../utils/map' as *;
@use '../../../color/functions' as *;
@use '../../../elevations/' as *;

////
/// @group themes
/// @package theming
/// @access public
////

/// File Input Theme
///
/// PRIMARY TOKENS:
/// - `$file-names-background` — The file names container background color.
/// - `$file-selector-button-background` — The file input selector button background color.
///
/// Derived colors are auto-calculated for contrast.
///
/// @param {Map} $schema [$light-material-schema] - The schema used as basis for styling the component.
/// @param {Color} $file-names-background [null] - The file names container background color. PRIMARY - derives all file-names foreground colors.
/// @param {Color} $file-names-background--focused [null] - The file names container background color when focused. Auto-derived from file-names-background.
/// @param {Color} $file-names-background--filled [null] - The file names container background color when filled. Auto-derived from file-names-background.
/// @param {Color} $file-names-background--disabled [null] - The file names container background color when disabled. Auto-derived from file-names-background.
/// @param {Color} $file-names-foreground [null] - The file names color. Auto-derived from file-names-background.
/// @param {Color} $file-names-foreground--focused [null] - The file names color when focused. Auto-derived from file-names-background--focused.
/// @param {Color} $file-names-foreground--filled [null] - The file names color when filled. Auto-derived from file-names-background--filled.
/// @param {Color} $file-names-foreground--disabled [null] - The file names color when disabled. Auto-derived from file-names-background--disabled.
/// @param {Color} $file-selector-button-background [null] - The selector button background color. PRIMARY - derives all selector button foreground colors.
/// @param {Color} $file-selector-button-background--focused [null] - The selector button background color when focused. Auto-derived from file-selector-button-background.
/// @param {Color} $file-selector-button-background--filled [null] - The selector button background color when filled. Auto-derived from file-selector-button-background.
/// @param {Color} $file-selector-button-background--disabled [null] - The selector button background color when disabled. Auto-derived from file-selector-button-background.
/// @param {Color} $file-selector-button-foreground [null] - The selector button foreground color. Auto-derived from file-selector-button-background.
/// @param {Color} $file-selector-button-foreground--focused [null] - The selector button foreground color when focused. Auto-derived from file-selector-button-background--focused.
/// @param {Color} $file-selector-button-foreground--filled [null] - The selector button foreground color when filled. Auto-derived from file-selector-button-background--filled.
/// @param {Color} $file-selector-button-foreground--disabled [null] - The selector button foreground color when disabled. Auto-derived from file-selector-button-background--disabled.
/// @example scss - Change the focused border and label colors
///   $my-file-input-theme: file-input-theme($file-names-foreground: #09f);
///   // Pass the theme to the css-vars() mixin
///   @include css-vars($my-file-input-theme);
@function file-input-theme(
    $schema: $light-material-schema,
    $file-names-background: null,
    $file-names-background--focused: null,
    $file-names-background--filled: null,
    $file-names-background--disabled: null,
    $file-names-foreground: null,
    $file-names-foreground--focused: null,
    $file-names-foreground--filled: null,
    $file-names-foreground--disabled: null,

    $file-selector-button-background: null,
    $file-selector-button-background--focused: null,
    $file-selector-button-background--filled: null,
    $file-selector-button-background--disabled: null,
    $file-selector-button-foreground: null,
    $file-selector-button-foreground--focused: null,
    $file-selector-button-foreground--filled: null,
    $file-selector-button-foreground--disabled: null
) {
    $selector: '.igx-file-input';
    $file-input-schema: ();

    @if map.has-key($schema, 'file-input') {
        $file-input-schema: map.get($schema, 'file-input');
    } @else {
        $file-input-schema: $schema;
    }

    $theme: digest-schema($file-input-schema);

    @if $file-names-background != transparent {
        @if not($file-names-background--focused) and $file-names-background {
            $file-names-background--focused: dynamic-shade(var(--file-names-background));
        }

        @if not($file-names-background--filled) and $file-names-background {
            $file-names-background--filled: $file-names-background;
        }

        @if not($file-names-background--disabled) and $file-names-background {
            $file-names-background--disabled: hsla(from $file-names-background h s l / 0.4);
        }

        @if not($file-names-foreground) and $file-names-background {
            $file-names-foreground: adaptive-contrast($file-names-background);
        }

        @if not($file-names-foreground--focused) and $file-names-background--focused {
            $file-names-foreground--focused: adaptive-contrast($file-names-background--focused);
        }

        @if not($file-names-foreground--filled) and $file-names-background--filled {
            $file-names-foreground--filled: adaptive-contrast($file-names-background--filled);
        }

        @if not($file-names-foreground--disabled) and $file-names-background--disabled {
            $file-names-foreground--disabled: adaptive-contrast($file-names-background--disabled);
        }
    }

    @if $file-selector-button-background != transparent {
        @if not($file-selector-button-background--focused) and $file-selector-button-background {
            $file-selector-button-background--focused: dynamic-shade(var(--file-selector-button-background));
        }

        @if not($file-selector-button-background--filled) and $file-selector-button-background {
            $file-selector-button-background--filled: $file-selector-button-background;
        }

        @if not($file-selector-button-background--disabled) and $file-selector-button-background {
            $file-selector-button-background--disabled: hsla(from $file-selector-button-background h s l / 0.4);
        }

        @if not($file-selector-button-foreground) and $file-selector-button-background {
            $file-selector-button-foreground: adaptive-contrast($file-selector-button-background);
        }

        @if not($file-selector-button-foreground--focused) and $file-selector-button-background--focused {
            $file-selector-button-foreground--focused: adaptive-contrast($file-selector-button-background--focused);
        }

        @if not($file-selector-button-foreground--filled) and $file-selector-button-background--filled {
            $file-selector-button-foreground--filled: adaptive-contrast($file-selector-button-background--filled);
        }

        @if not($file-selector-button-foreground--disabled) and $file-selector-button-background--disabled {
            $file-selector-button-foreground--disabled: adaptive-contrast($file-selector-button-background--disabled);
        }
    }

    @return extend(
        $theme,
        (
            selector: $selector,
            file-names-background: $file-names-background,
            file-names-background--focused: $file-names-background--focused,
            file-names-background--filled: $file-names-background--filled,
            file-names-background--disabled: $file-names-background--disabled,
            file-names-foreground: $file-names-foreground,
            file-names-foreground--focused: $file-names-foreground--focused,
            file-names-foreground--filled: $file-names-foreground--filled,
            file-names-foreground--disabled: $file-names-foreground--disabled,

            file-selector-button-background: $file-selector-button-background,
            file-selector-button-background--focused: $file-selector-button-background--focused,
            file-selector-button-background--filled: $file-selector-button-background--filled,
            file-selector-button-background--disabled: $file-selector-button-background--disabled,
            file-selector-button-foreground: $file-selector-button-foreground,
            file-selector-button-foreground--focused: $file-selector-button-foreground--focused,
            file-selector-button-foreground--filled: $file-selector-button-foreground--filled,
            file-selector-button-foreground--disabled: $file-selector-button-foreground--disabled,
        )
    );
}
