@use '@lucas-labs/lui-micro/color' as color;
@use '@lucas-labs/lui-micro/var' as var;

@mixin chroma($dark: false) {
    $orange:      if($dark, 'palette/orange/base', 'palette/orange/dark/15%');
    $blue:        if($dark, 'palette/blue/base', 'palette/blue/dark/15%');
    $fg:          'text';
    $subtle:      'subtle';
    $more-subtle: if($dark, 'elevation/8', 'elevation/8');
    $brown:       if($dark, 'palette/brown/base', 'palette/brown/dark/15%');
    $red:         if($dark, 'palette/red/base', 'palette/red/dark/15%');
    $green:       if($dark, 'palette/green/base', 'palette/green/dark/10%');
    $teal:        if($dark, 'palette/teal/base', 'palette/teal/dark/15%');
    $purple:      if($dark, 'palette/purple/base', 'palette/purple/dark/10%');
    $yellow:      if($dark, 'palette/yellow/base', 'palette/yellow/dark/25%');
    $violet:      if($dark, 'palette/violet/base', 'palette/violet/dark/50%');
    $pink:        if($dark, 'palette/pink/base', 'palette/pink/dark/25%');
    $blwh:        if($dark, 'palette/white/base', 'palette/black/base');

    .chroma {
        .code-inner {
            font: 14px var.get('code-font-family');
        }

        .bp { color: color.get($orange); font-weight: 600;} // NameBuiltinPseudo
        .c { color: color.get($subtle); font-style: italic; } // Comment 
        .c1 { color: color.get($subtle); font-style: italic; } // CommentSingle
        .ch { color: color.get($subtle); font-style: italic; } // CommentHashbang
        .cm { color: color.get($subtle); font-style: italic; } // CommentMultiline
        .cp { color: color.get($blue); } // CommentPreproc
        .cpf { color: color.get($blue); } // CommentPreprocFile
        .cs { color: color.get($subtle); } // CommentSpecial
        .dl { color: color.get($blue); } // LiteralStringDelimiter
        .fm {} // NameFunctionMagic
        .g {} // Generic
        .gd { color: color.get($blwh); background-color: rgba(#{color.get($red, 'rgb')}, .25); } // GenericDeleted
        .ge { font-style: italic; } // GenericEmph
        .gh { color: color.get($teal); } // GenericHeading
        .gi { color: color.get($blwh); background-color: rgba(#{color.get($green, 'rgb')}, 0.3); } // GenericInserted
        .gl {} // GenericUnderline
        .go { color: color.get($orange); } // GenericOutput
        .gp { color: color.get($subtle); font-weight: bold; } // GenericPrompt
        .gr { color: color.get($brown); } // GenericError
        .gs { font-weight: bold; } // GenericStrong
        .gt { color: color.get($brown); } // GenericTraceback
        .gu { color: color.get($teal); } // GenericSubheading
        .il { color: color.get($orange); } // LiteralNumberIntegerLong
        .k { color: color.get($purple); font-weight: 600; } // Keyword
        .kc { color: color.get($yellow); } // KeywordConstant
        .kd { color: color.get($purple); font-weight: 600; } // KeywordDeclaration
        .kn { color: color.get($yellow); } // KeywordNamespace
        .kp { color: color.get($purple); font-weight: 600; } // KeywordPseudo
        .kr { color: color.get($purple); font-weight: 600;} // KeywordReserved
        .kt { color: color.get($yellow); } // KeywordType
        .l {} // Literal
        .ld {} // LiteralDate
        .m { color: color.get($orange); } // LiteralNumber
        .mb { color: color.get($orange); } // LiteralNumberBin
        .mf { color: color.get($orange); } // LiteralNumberFloat
        .mh { color: color.get($orange); } // LiteralNumberHex
        .mi { color: color.get($orange); } // LiteralNumberInteger
        .mo { color: color.get($orange); } // LiteralNumberOct
        .n { color: color.get($violet); } // Name
        .na { color: color.get($yellow); } // NameAttribute
        .nb { color: color.get($orange); font-weight: 600; } // NameBuiltin
        .nc { color: color.get($pink); } // NameClass
        .nd { color: color.get($pink); } // NameDecorator
        .ne { color: color.get($brown); } // NameException
        .nf { color: color.get($blue); } // NameFunction
        .ni { color: color.get($pink); } // NameEntity
        .nl { color: color.get($yellow); } // NameLabel
        .nn { color: color.get($yellow); } // NameNamespace
        .no { color: color.get($yellow); } // NameConstant
        .nt { color: color.get($purple); } // NameTag
        .nv { color: color.get($orange); } // NameVariable
        .nx { color: color.get($orange); } // NameOther
        .o { color: color.get($teal); } // Operator
        .ow { color: color.get($teal); font-weight: bold; } // OperatorWord
        .p { color: color.get($subtle); } // Punctuation
        .py {} // NameProperty
        .s { color: color.get($green); } // LiteralString
        .s1 { color: color.get($green); } // LiteralStringSingle
        .s2 { color: color.get($green); } // LiteralStringDouble
        .sa { color: color.get($green); } // LiteralStringAffix
        .sb { color: color.get($green); } // LiteralStringBacktick
        .sc { color: color.get($green); } // LiteralStringChar
        .sd { color: color.get($green); } // LiteralStringDoc
        .se { color: color.get($blue); } // LiteralStringEscape
        .sh { color: color.get($green); } // LiteralStringHeredoc
        .si { color: color.get($green); } // LiteralStringInterpol
        .sr { color: color.get($blue); } // LiteralStringRegex
        .ss { color: color.get($green); } // LiteralStringSymbol
        .sx { color: color.get($green); } // LiteralStringOther
        .vc { color: color.get($yellow); } // NameVariableClass
        .vg { color: color.get($orange); } // NameVariableGlobal
        .vi { color: color.get($yellow); } // NameVariableInstance
        .vm {} // NameVariableMagic
        .w { color: color.get($more-subtle); } // TextWhitespace    
    }
}