#!/usr/bin/env bash
# Unix-style user configuration - does one thing well
set -e

configure_user() {
    local username="${1:-}"
    local config_file="${2:-/etc/nixos/configuration.nix}"
    local home_file="${3:-/etc/nixos/home.nix}"

    # Get username if not provided
    if [[ -z "$username" ]]; then
        if [[ "${OMNIXY_QUIET:-}" == "1" ]]; then
            echo "Username required in quiet mode" >&2
            exit 1
        fi
        read -p "Username: " username
    fi

    # Validate username
    if [[ ! "$username" =~ ^[a-zA-Z][a-zA-Z0-9_-]*$ ]]; then
        echo "Invalid username: $username" >&2
        exit 1
    fi

    # Update configuration files
    if [[ -f "$config_file" ]]; then
        sudo sed -i "s/user = \"user\"/user = \"$username\"/" "$config_file"
        [[ "${OMNIXY_QUIET:-}" != "1" ]] && echo "Updated main configuration"
    fi

    if [[ -f "$home_file" ]]; then
        sudo sed -i "s/home.username = \"user\"/home.username = \"$username\"/" "$home_file" 2>/dev/null || true
        sudo sed -i "s|home.homeDirectory = \"/home/user\"|home.homeDirectory = \"/home/$username\"|" "$home_file" 2>/dev/null || true
        [[ "${OMNIXY_QUIET:-}" != "1" ]] && echo "Updated home configuration"
    fi

    # Output username for scripting
    echo "$username"
}

main() {
    case "${1:-}" in
        --help|-h)
            echo "Usage: omnixy-configure-user [username] [config-file] [home-file]"
            echo "Updates configuration files with specified username"
            echo "Prompts for username if not provided (unless --quiet)"
            exit 0
            ;;
        *)
            configure_user "$1" "$2" "$3"
            ;;
    esac
}

main "$@"