#!/bin/sh
set -eu

if [ "${DEBIAN_POSTRM_SOURCE_ONLY:-0}" = "1" ]; then
    exit 0
fi

if [ "$1" != "remove" ] && [ "$1" != "purge" ]; then
    exit 0
fi

find_active_session()
{
    loginctl list-sessions --no-legend 2>/dev/null | while read -r sid _rest; do
        [ -n "$sid" ] || continue

        active=$(loginctl show-session "$sid" -p Active --value 2>/dev/null || true)
        state=$(loginctl show-session "$sid" -p State --value 2>/dev/null || true)
        remote=$(loginctl show-session "$sid" -p Remote --value 2>/dev/null || true)
        session_type=$(loginctl show-session "$sid" -p Type --value 2>/dev/null || true)
        user_name=$(loginctl show-session "$sid" -p Name --value 2>/dev/null || true)
        user_id=$(loginctl show-session "$sid" -p User --value 2>/dev/null || true)

        [ "$active" = "yes" ] || continue
        [ "$state" = "active" ] || continue
        [ "$remote" = "no" ] || continue
        [ -n "$user_name" ] || continue
        [ -n "$user_id" ] || continue

        printf '%s\n%s\n' "$user_name" "$user_id"
        return 0
    done

    return 1
}

dconfig_user_data_file()
{
    home_dir="$1"
    printf '%s/.config/dsg/configs/org.deepin.dde.file-manager/org.deepin.dde.file-manager.desktop.musicplayer.json' "$home_dir"
}

dconfig_daemon_data_file()
{
    uid="$1"
    printf '/var/lib/dde-dconfig-daemon/.config/%s/org.deepin.dde.file-manager/org.deepin.dde.file-manager.desktop.musicplayer.json' "$uid"
}

if [ "$1" = "purge" ]; then
    cat /etc/passwd | while IFS=: read -r user_name _passwd uid _gid _gecos home_dir _shell; do
        [ -n "$home_dir" ] && [ -d "$home_dir" ] || continue

        user_config_file=$(dconfig_user_data_file "$home_dir")
        if [ -f "$user_config_file" ]; then
            rm -f "$user_config_file"
            echo "Cleaned DConfig cache: $user_config_file"
        fi

        config_dir=$(dirname "$user_config_file")
        if [ -d "$config_dir" ]; then
            rmdir --ignore-fail-on-non-empty "$config_dir" 2>/dev/null || true
        fi

        if [ -n "$uid" ] && [ "$uid" -gt 0 ] 2>/dev/null; then
            daemon_file=$(dconfig_daemon_data_file "$uid")
            if [ -f "$daemon_file" ]; then
                rm -f "$daemon_file"
                echo "Cleaned DConfig daemon data: $daemon_file"
            fi

            daemon_app_dir=$(dirname "$daemon_file")
            if [ -d "$daemon_app_dir" ]; then
                rmdir --ignore-fail-on-non-empty "$daemon_app_dir" 2>/dev/null || true
            fi
            daemon_user_dir=$(dirname "$daemon_app_dir")
            if [ -d "$daemon_user_dir" ]; then
                rmdir --ignore-fail-on-non-empty "$daemon_user_dir" 2>/dev/null || true
            fi
        fi
    done

    exit 0
fi

# --- remove ---

restart_dde_file_manager() {
    if command -v systemctl >/dev/null 2>&1; then
        systemctl --user daemon-reload 2>/dev/null || true
        sleep 1
        systemctl --user restart dde-file-manager.service 2>/dev/null || true
        sleep 1
        systemctl --user restart dde-shell-plugin@org.deepin.ds.desktop.service 2>/dev/null || true
    fi

    sleep 2

    if command -v dbus-send >/dev/null 2>&1; then
        dbus-send --session --type=method_call \
            --dest=org.deepin.Filemanager.Daemon \
            /org/deepin/Filemanager/Daemon \
            org.deepin.Filemanager.Daemon.Refresh 2>/dev/null || true
    fi
}

restart_dde_file_manager

exit 0