@use'sass:list';
@use'sass:map';
@use "../functions/responsive" as *;
@use "../../../config/dims" as *;
@use "../../../../themes/niva/config/dims" as *;

$border-style-map:(
    bl-style:border-left-style,
    br-style:border-right-style,
    bt-style:border-top-style,
    bb-style:border-bottom-style,
    bis-style:border-inline-start-style,
    bie-style:border-inline-end-style,
    border-style:(
        border-top-style,
        border-left-style,
        border-bottom-style,
        border-right-style
    ),
    bx-style:(
        border-left-style,
        border-right-style
    ),
    by-style:(
        border-top-style,
        border-bottom-style
    ),
);
$border-style-values:(
    solid,
    dashed,
    dotted,
    double,
    groove,
    inset,
    outset,
    ridge,
    none,
);

$radius-map:(
    tl:border-top-left-radius,
    tr:border-top-right-radius,
    bl:border-bottom-left-radius,
    br:border-bottom-right-radius,
    ss:border-start-start-radius,
    se:border-start-end-radius,
    es:border-end-start-radius,
    ee:border-end-end-radius,
    all:(
        border-top-left-radius,
        border-top-right-radius,
        border-bottom-left-radius,
        border-bottom-right-radius
    ),
);

@function generate-border-class-name($map-config){
    $conf-border-width:map.get($map-config , last-width);
    $result:();

    @for $i from 0 through $conf-border-width{
        $item:"." + "bw" + "-" + $i;
        $result:list.append($result, $item)
    }

    @return $result;
}

@function generate-border-class-value($map-config){
    $conf-border-width:map.get($map-config, last-width);
    $result:();

    @for $i from 0 through $conf-border-width{
        $result:list.append($result, $i + px)
    }

    @return $result;
}

@mixin generate-total-style-border($map-config){
    $class-name-list:generate-border-class-name($map-config);
    $value-list:generate-border-class-value($map-config);
    $map:();
    $list:();
    @for $i from 1 through list.length($class-name-list){
        $class-item:list.nth($class-name-list , $i);
        $value:list.nth($value-list , $i);

        #{$class-item}{
            border-width:$value;
        }
    }
}

@mixin generate-border-radius($radius-map , $values , $class-list){
    @each $name , $value in $values{
        @each $key , $property-list in $radius-map{
            $class-item:$class-list + "-" + $key;
            $base:generate-classes-on-value($class-item , $name);
            #{$base}{
                @each $property in $property-list{
                    #{$property}:$value;
                }
            }
        }
    }
}

@mixin generate-border-style($border-map , $border-style-values){
    @each $value in $border-style-values{
        @each $border-style-class , $border-style-properties in $border-map{
            $base:generate-classes-on-value($border-style-class , $value);
            #{$base}{
                @each $property in $border-style-properties{
                    #{$property}:$value;
                }
            }
        }
    }
}

@include generate-total-style-border($conf-border-thickness);
@include generate-border-radius($radius-map , $border-radius , radius);
@include generate-border-style($border-style-map , $border-style-values);