@import './generated/fonts.mobile.variables.scss';
@import './generated/fonts.desktop.variables.scss';
@import './generated/colors.variables.scss';
@import './base/palette.variables.scss';
@import './base/variants.variables.scss';
@import './base/sizes.variables.scss';
@import './base/alphas.variables.scss';
@import './base/border-radius.variables.scss';
@import './base/all-sizes.variables.scss';
@import './base/circle-sizes.variables.scss';
@import './base/transitions.variables.scss';

@function get-token($name) {
    @return var(--#{$name});
}

@mixin create-token($name, $value) {
    --#{$name}: #{$value};
}

@function color($name) {
    @if map-has-key($colors, $name) {
        @return get-token(color-#{$name});
    } @else {
        @error 'No color with key #{$name}';
    }
}

@function color-hex($name) {
    @if map-has-key($colors, $name) {
        @return map-get($colors, $name);
    } @else {
        @error 'No color with key #{$name}';
    }
}

@function duration($name) {
    @if map-has-key($durations, $name) {
        @return map-get($durations, $name);
    } @else {
        @error 'No transition duration with key #{$name}';
    }
}

@mixin font($name, $variant: 'desktop') {
    $map: if($variant == 'mobile', $font-size-mobile, $font-size-desktop);
    @if map-has-key($map, $name) {
        font-size: get-token(#{$name}-size-#{$variant});
        font-weight: get-token(#{$name}-weight-#{$variant});
        line-height: get-token(#{$name}-line-#{$variant});
    } @else {
        @error 'No font with key #{$name}';
    }
}

@function font-size($name, $variant: 'desktop') {
    $map: if($variant == 'mobile', $font-size-mobile, $font-size-desktop);
    @if map-has-key($map, $name) {
        @return get-token(#{$name}-size-#{$variant});
    } @else {
        @error 'No font-size with key #{$name}';
    }
}

@function line-height($name, $variant: 'desktop') {
    $map: if($variant == 'mobile', $font-size-mobile, $font-size-desktop);
    @if map-has-key($map, $name) {
        @return get-token(#{$name}-line-#{$variant});
    } @else {
        @error 'No line-height with key #{$name}';
    }
}

@function font-weight($name, $variant: 'desktop') {
    $map: if($variant == 'mobile', $font-size-mobile, $font-size-desktop);
    @if map-has-key($map, $name) {
        @return get-token(#{$name}-weight-#{$variant});
    } @else {
        @error 'No font-weight with key #{$name}';
    }
}

@function border-radius($name) {
    @if map-has-key($border-radius, $name) {
        @return get-token(border-radius-#{$name});
    } @else {
        @error 'No border-radius with key #{$name}';
    }
}

@function all-size($name) {
    @if map-has-key($all-sizes, size-#{$name}) {
        @return get-token(size-#{$name});
    } @else {
        @error 'No size with key #{$name}';
    }
}

@function circle-size($name) {
    @if map-has-key($circle-sizes, circle-#{$name}) {
        @return get-token(circle-#{$name});
    } @else {
        @error 'No circle size with key #{$name}';
    }
}
