package eu.darken.sdmse.common.theming

import androidx.compose.material3.ColorScheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.ui.graphics.Color

object SdmSeColorsGreen {

    val LightDefault = lightColorScheme(
        primary = Color(0xFF006D36),
        onPrimary = Color(0xFFFFFFFF),
        primaryContainer = Color(0xFF98F7B5),
        onPrimaryContainer = Color(0xFF004F26),
        secondary = Color(0xFF4E6354),
        onSecondary = Color(0xFFFFFFFF),
        secondaryContainer = Color(0xFFD0E8D5),
        onSecondaryContainer = Color(0xFF374B3D),
        tertiary = Color(0xFF3C6471),
        onTertiary = Color(0xFFFFFFFF),
        tertiaryContainer = Color(0xFFBFE9F8),
        onTertiaryContainer = Color(0xFF234C58),
        error = Color(0xFFBA1A1A),
        onError = Color(0xFFFFFFFF),
        errorContainer = Color(0xFFFFDAD6),
        onErrorContainer = Color(0xFF93000A),
        background = Color(0xFFF5FBF3),
        onBackground = Color(0xFF171D18),
        surface = Color(0xFFF5FBF3),
        onSurface = Color(0xFF171D18),
        surfaceVariant = Color(0xFFDCE5DB),
        onSurfaceVariant = Color(0xFF404941),
        outline = Color(0xFF707970),
        outlineVariant = Color(0xFFC0C9BF),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFF2C322C),
        inverseOnSurface = Color(0xFFECF2EA),
        inversePrimary = Color(0xFF7CDA9A),
    )

    val DarkDefault = darkColorScheme(
        primary = Color(0xFF7CDA9A),
        onPrimary = Color(0xFF00391A),
        primaryContainer = Color(0xFF004F26),
        onPrimaryContainer = Color(0xFF98F7B5),
        secondary = Color(0xFFB5CCBA),
        onSecondary = Color(0xFF213528),
        secondaryContainer = Color(0xFF374B3D),
        onSecondaryContainer = Color(0xFFD0E8D5),
        tertiary = Color(0xFFA3CDDC),
        onTertiary = Color(0xFF043640),
        tertiaryContainer = Color(0xFF234C58),
        onTertiaryContainer = Color(0xFFBFE9F8),
        error = Color(0xFFFFB4AB),
        onError = Color(0xFF690005),
        errorContainer = Color(0xFF93000A),
        onErrorContainer = Color(0xFFFFDAD6),
        background = Color(0xFF0F1510),
        onBackground = Color(0xFFDEE4DC),
        surface = Color(0xFF0F1510),
        onSurface = Color(0xFFDEE4DC),
        surfaceVariant = Color(0xFF404941),
        onSurfaceVariant = Color(0xFFC0C9BF),
        outline = Color(0xFF8A938A),
        outlineVariant = Color(0xFF404941),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFFDEE4DC),
        inverseOnSurface = Color(0xFF2C322C),
        inversePrimary = Color(0xFF006D36),
    )

    val LightMediumContrast = lightColorScheme(
        primary = Color(0xFF004E25),
        onPrimary = Color(0xFFFFFFFF),
        primaryContainer = Color(0xFF2A854B),
        onPrimaryContainer = Color(0xFFFFFFFF),
        secondary = Color(0xFF273A2D),
        onSecondary = Color(0xFFFFFFFF),
        secondaryContainer = Color(0xFF5D7262),
        onSecondaryContainer = Color(0xFFFFFFFF),
        tertiary = Color(0xFF0D3C47),
        onTertiary = Color(0xFFFFFFFF),
        tertiaryContainer = Color(0xFF4B7381),
        onTertiaryContainer = Color(0xFFFFFFFF),
        error = Color(0xFF740006),
        onError = Color(0xFFFFFFFF),
        errorContainer = Color(0xFFCF2C27),
        onErrorContainer = Color(0xFFFFFFFF),
        background = Color(0xFFF5FBF3),
        onBackground = Color(0xFF171D18),
        surface = Color(0xFFF5FBF3),
        onSurface = Color(0xFF0C120D),
        surfaceVariant = Color(0xFFDCE5DB),
        onSurfaceVariant = Color(0xFF2F3830),
        outline = Color(0xFF4C544C),
        outlineVariant = Color(0xFF666E66),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFF2C322C),
        inverseOnSurface = Color(0xFFECF2EA),
        inversePrimary = Color(0xFF7CDA9A),
    )

    val DarkMediumContrast = darkColorScheme(
        primary = Color(0xFF92F1AF),
        onPrimary = Color(0xFF002D12),
        primaryContainer = Color(0xFF47A368),
        onPrimaryContainer = Color(0xFF000000),
        secondary = Color(0xFFCAE2CF),
        onSecondary = Color(0xFF162A1D),
        secondaryContainer = Color(0xFF7F9685),
        onSecondaryContainer = Color(0xFF000000),
        tertiary = Color(0xFFB8E3F2),
        onTertiary = Color(0xFF002A33),
        tertiaryContainer = Color(0xFF6E97A5),
        onTertiaryContainer = Color(0xFF000000),
        error = Color(0xFFFFD2CC),
        onError = Color(0xFF540003),
        errorContainer = Color(0xFFFF5449),
        onErrorContainer = Color(0xFF000000),
        background = Color(0xFF0F1510),
        onBackground = Color(0xFFDEE4DC),
        surface = Color(0xFF0F1510),
        onSurface = Color(0xFFFFFFFF),
        surfaceVariant = Color(0xFF404941),
        onSurfaceVariant = Color(0xFFD5DED4),
        outline = Color(0xFFABB4AB),
        outlineVariant = Color(0xFF89928A),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFFDEE4DC),
        inverseOnSurface = Color(0xFF262B26),
        inversePrimary = Color(0xFF005028),
    )

    val LightHighContrast = lightColorScheme(
        primary = Color(0xFF00421E),
        onPrimary = Color(0xFFFFFFFF),
        primaryContainer = Color(0xFF006130),
        onPrimaryContainer = Color(0xFFFFFFFF),
        secondary = Color(0xFF1D3024),
        onSecondary = Color(0xFFFFFFFF),
        secondaryContainer = Color(0xFF394E3F),
        onSecondaryContainer = Color(0xFFFFFFFF),
        tertiary = Color(0xFF00313B),
        onTertiary = Color(0xFFFFFFFF),
        tertiaryContainer = Color(0xFF254E5A),
        onTertiaryContainer = Color(0xFFFFFFFF),
        error = Color(0xFF600004),
        onError = Color(0xFFFFFFFF),
        errorContainer = Color(0xFF98000A),
        onErrorContainer = Color(0xFFFFFFFF),
        background = Color(0xFFF5FBF3),
        onBackground = Color(0xFF171D18),
        surface = Color(0xFFF5FBF3),
        onSurface = Color(0xFF000000),
        surfaceVariant = Color(0xFFDCE5DB),
        onSurfaceVariant = Color(0xFF000000),
        outline = Color(0xFF252E26),
        outlineVariant = Color(0xFF424B43),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFF2C322C),
        inverseOnSurface = Color(0xFFFFFFFF),
        inversePrimary = Color(0xFF7CDA9A),
    )

    val DarkHighContrast = darkColorScheme(
        primary = Color(0xFFB0FFCA),
        onPrimary = Color(0xFF000000),
        primaryContainer = Color(0xFF78D697),
        onPrimaryContainer = Color(0xFF000F04),
        secondary = Color(0xFFDEF6E2),
        onSecondary = Color(0xFF000000),
        secondaryContainer = Color(0xFFB1C8B6),
        onSecondaryContainer = Color(0xFF010E04),
        tertiary = Color(0xFFD6F6FF),
        onTertiary = Color(0xFF000000),
        tertiaryContainer = Color(0xFF9FC9D8),
        onTertiaryContainer = Color(0xFF000D11),
        error = Color(0xFFFFECE9),
        onError = Color(0xFF000000),
        errorContainer = Color(0xFFFFAEA4),
        onErrorContainer = Color(0xFF220001),
        background = Color(0xFF0F1510),
        onBackground = Color(0xFFDEE4DC),
        surface = Color(0xFF0F1510),
        onSurface = Color(0xFFFFFFFF),
        surfaceVariant = Color(0xFF404941),
        onSurfaceVariant = Color(0xFFFFFFFF),
        outline = Color(0xFFE9F1E8),
        outlineVariant = Color(0xFFBCC5BB),
        scrim = Color(0xFF000000),
        inverseSurface = Color(0xFFDEE4DC),
        inverseOnSurface = Color(0xFF000000),
        inversePrimary = Color(0xFF005028),
    )

    fun lightScheme(style: ThemeStyle): ColorScheme = when (style) {
        ThemeStyle.DEFAULT, ThemeStyle.MATERIAL_YOU -> LightDefault
        ThemeStyle.MEDIUM_CONTRAST -> LightMediumContrast
        ThemeStyle.HIGH_CONTRAST -> LightHighContrast
    }

    fun darkScheme(style: ThemeStyle): ColorScheme = when (style) {
        ThemeStyle.DEFAULT, ThemeStyle.MATERIAL_YOU -> DarkDefault
        ThemeStyle.MEDIUM_CONTRAST -> DarkMediumContrast
        ThemeStyle.HIGH_CONTRAST -> DarkHighContrast
    }
}
