#!/usr/bin/env bash

# Tsukimi Flatpak installer and launcher script
# App ID: moe.tsuna.tsukimi

set -e  # Exit on error

VERSION=2

if [[ -z "$1" ]]; then
    echo "Usage: $(basename "$0") <APP_ID> [FLATHUB_REPO]" >&2
    exit 1
fi

if [[ "$1" == "--version" ]]; then
    echo "$VERSION"
    exit
fi

APP_ID="$1"
shift

if [[ -z "$1" ]]; then
    FLATHUB_REPO="https://flathub.org/repo/flathub.flatpakrepo"
else
    FLATHUB_REPO="$1"
    shift
fi

# Colors for output (optional)
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# Function to print colored output
print_success() { echo -e "${GREEN}✓${NC} $1"; }
print_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
print_error() { echo -e "${RED}✗${NC} $1"; }
print_info() { echo -e "${NC}✗${NC} $1"; }

# Check if flatpak is installed
if ! command -v flatpak &> /dev/null; then
    print_error "Flatpak is not installed on this system."
    echo "Please install flatpak first:"
    echo "  - Ubuntu/Debian: sudo apt install flatpak"
    echo "  - Fedora: sudo dnf install flatpak"
    echo "  - Arch: sudo pacman -S flatpak"
    exit 1
fi

# Ensure Flathub remote is added (user scope, so no polkit/root prompt)
if ! flatpak remotes --user --columns=name | grep -q "^flathub$"; then
    print_warning "Flathub remote not found. Adding it now..."
    flatpak remote-add --user --if-not-exists flathub "$FLATHUB_REPO"
    print_success "Flathub remote added"
else
    print_success "Flathub remote already configured"
fi

# Check if the app is already installed
if flatpak list --columns=application | grep -q "^${APP_ID}$"; then
    print_success "$APP_ID is already installed"

    # Check for ANY flatpak updates
    print_info "Checking for flatpak updates..."
    if flatpak update --dry-run "$APP_ID" 2>&1 | grep -q "Updates:"; then
        print_warning "Updates available! Updating flatpak..."
        flatpak update --user --noninteractive "$APP_ID"
        print_success "Flatpak updated"
    else
        print_success "Flatpak is up to date"
    fi

else
    print_warning "Flatpak not found. Installing now..."

    # Install app from Flathub (user scope + noninteractive = unattended, no prompts)
    if flatpak install --user --noninteractive flathub "$APP_ID"; then
        print_success "$APP_ID installed successfully"
    else
        print_error "Failed to install $APP_ID"
        exit 1
    fi
fi

# Run app
flatpak run "$APP_ID" -- "$@"

