#!/bin/sh
#
# S22brightness — 开机按用户设置恢复背光（MeowOS M21）
#
# 位置/顺序（/etc/init.d 按文件名自然序执行，见 /etc/init.d/rcS）：
#   S11jpeg_display_shell   画开机 logo，画前把背光压到 <=20（防「面板上电默认很亮」）
#   → S21mount_ubifs        挂载 /usr/data
#   → S22brightness         本脚本：此时才读得到 /usr/data/meow/settings.conf
#   → S30dbus … → S70meow_sysui / S90meow_bootmenu   launcher/watchdog 接管后继续维持用户亮度
#
# 为什么不能只改 S11：S11 早于 S21，/usr/data 未挂载 → settings.conf 不存在，只能写死一个安全低值。
#
# 行为：
#   - 读 display.brightness，以 display.brightness_min（下限，缺省 1）和
#     /sys/class/backlight/backlight_pwm0/max_brightness（上限，本机实测 101）clamp 后写入。
#   - 单位是 0..max_brightness 的**绝对档位**，不是百分比；display.brightness_min 同单位。
#   - 读不到文件 / 解析不出 display.brightness / max_brightness 读不到 → **不改背光**
#     （保持 S11 设的低值），打一行日志后 exit 0。
#   - 幂等（当前值已是目标值则不写）、无 sleep / 无重试，任何运行期失败都 exit 0（不阻断 init 链）。

BL_BRIGHTNESS="/sys/class/backlight/backlight_pwm0/brightness"
BL_MAX="/sys/class/backlight/backlight_pwm0/max_brightness"
MEOW_SETTINGS="/usr/data/meow/settings.conf"

log()
{
    echo "S22brightness: $*"
}

start()
{
    # /usr/data 刚挂载时 settings.conf 可能尚不存在（新机/首次启动）或被正在写：
    # 只读一次，读不到就保持 S11 的低亮度，不 sleep 重试（不阻塞 init 链）。
    if [ ! -r "$MEOW_SETTINGS" ]; then
        log "settings.conf 不可读（$MEOW_SETTINGS），保持 S11 低亮度"
        return 0
    fi

    max=$(cat "$BL_MAX" 2>/dev/null)
    case "$max" in
        ''|*[!0-9]*)
            log "max_brightness 读不到，不改背光（保持 S11 低亮度）"
            return 0
            ;;
    esac
    if [ "$max" -le 0 ]; then
        log "max_brightness=$max 非法，不改背光"
        return 0
    fi

    # 解析 settings.conf：<key> = <value>，容忍两侧空白/CR，忽略注释与非数字值。
    b=""
    mn=""
    while IFS='=' read -r k v; do
        k=$(printf '%s' "$k" | tr -d '[:space:]')
        v=$(printf '%s' "$v" | tr -d '[:space:]')
        case "$k" in
            display.brightness)
                case "$v" in
                    ''|*[!0-9]*) ;;
                    *) b="$v" ;;
                esac
                ;;
            display.brightness_min)
                case "$v" in
                    ''|*[!0-9]*) ;;
                    *) mn="$v" ;;
                esac
                ;;
        esac
    done < "$MEOW_SETTINGS"

    if [ -z "$b" ]; then
        log "settings.conf 无有效 display.brightness，保持 S11 低亮度"
        return 0
    fi

    [ -n "$mn" ] || mn=1
    [ "$mn" -lt 1 ] && mn=1
    [ "$mn" -gt "$max" ] && mn="$max"

    [ "$b" -lt "$mn" ] && b="$mn"
    [ "$b" -gt "$max" ] && b="$max"

    cur=$(cat "$BL_BRIGHTNESS" 2>/dev/null)
    if [ "$cur" = "$b" ]; then
        log "背光已是 $b，跳过写入"
        return 0
    fi

    if echo "$b" > "$BL_BRIGHTNESS" 2>/dev/null; then
        log "开机背光 -> $b（min=$mn max=$max）"
    else
        log "写背光 $b 失败，保持原值"
    fi
    return 0
}

case "$1" in
    start)
        start
        ;;
    stop|restart|reload)
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

exit 0
