#!/bin/bash
# ============================================================
# Bilsa Etkileşimli Tahta - Otomatik Kurulum ve Güncelleme
# Versiyon: 1.1 (Multi-User Config Desteği)
# ============================================================
# Bu script publish edilmiş dosyaları Pardus'a kurar
# ve otomatik başlatma ayarlarını yapar
# 
# Kullanım:
#   chmod +x install.sh
#   sudo ./install.sh
# ============================================================

set +e

# Root kontrolü
if [ "$EUID" -ne 0 ]; then
    echo "Bu script root yetkisi gerektirir!"
    echo "Lütfen şu şekilde çalıştırın: sudo ./install.sh"
    exit 1
fi

# Renk kodları
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'

echo ""
echo -e "${BLUE}============================================================${NC}"
echo -e "${BLUE}  Bilsa Etkileşimli Tahta - Kurulum ve Güncelleme${NC}"
echo -e "${CYAN}  Otomatik Güncelleme Sistemi: AKTIF${NC}"
echo -e "${BLUE}============================================================${NC}"
echo ""

# Script'in bulunduğu dizin
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
INSTALL_DIR="/opt/bilsa/interactive-board"

# Executable kontrolü
if [ ! -f "${SCRIPT_DIR}/bilsa-interactive-board" ]; then
    echo -e "${RED}[HATA] bilsa-interactive-board dosyası bulunamadı!${NC}"
    echo "Bu script, publish klasörü içinde çalıştırılmalıdır."
    exit 1
fi

# appsettings.json kontrolü
if [ ! -f "${SCRIPT_DIR}/appsettings.json" ]; then
    echo -e "${YELLOW}[UYARI] appsettings.json bulunamadı, varsayılan kullanılacak${NC}"
fi

# Versiyon bilgisi (assembly'den veya dosya adından)
CURRENT_VERSION=""
if [ -f "${SCRIPT_DIR}/bilsa-interactive-board" ]; then
    CURRENT_VERSION=$(strings "${SCRIPT_DIR}/bilsa-interactive-board" 2>/dev/null | grep -oP '^\d{4}$' | tail -1 || true)
fi
if [ -z "$CURRENT_VERSION" ]; then
    CURRENT_VERSION="bilinmiyor"
fi
echo -e "${CYAN}Kurulum hazır${NC}"
echo ""

# Masaüstü ortamını tespit et
detect_desktop() {
    if [ -n "$XDG_CURRENT_DESKTOP" ]; then
        echo "$XDG_CURRENT_DESKTOP"
    elif [ -n "$DESKTOP_SESSION" ]; then
        echo "$DESKTOP_SESSION"
    elif [ -n "$GDMSESSION" ]; then
        echo "$GDMSESSION"
    else
        if pgrep -x "xfce4-session" > /dev/null; then
            echo "XFCE"
        elif pgrep -x "gnome-session" > /dev/null; then
            echo "GNOME"
        elif pgrep -x "lxqt-session" > /dev/null; then
            echo "LXQt"
        elif pgrep -x "mate-session" > /dev/null; then
            echo "MATE"
        else
            echo "unknown"
        fi
    fi
}

DESKTOP_ENV=$(detect_desktop)
echo -e "${YELLOW}Tespit edilen masaüstü: ${DESKTOP_ENV}${NC}"
echo ""

# Kullanıcı onayı
read -p "Kuruluma devam etmek istiyor musunuz? (Y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ ! -z $REPLY ]]; then
    echo -e "${YELLOW}Kurulum iptal edildi.${NC}"
    exit 0
fi

echo ""

# 1. Eski kurulumu temizle
echo -e "${YELLOW}[1/7] Eski kurulum temizleniyor...${NC}"

# Çalışan uygulamayı durdur (install.sh kendini öldürmesin)
if pgrep -x "bilsa-inter" > /dev/null 2>&1 || pgrep -f "[b]ilsa-interactive-board" > /dev/null 2>&1; then
    echo "  Çalışan uygulama durduruluyor..."
    pkill -x "bilsa-interactive-board" 2>/dev/null || true
    pkill -f "/opt/bilsa/interactive-board/bilsa-interactive-board" 2>/dev/null || true
    sleep 2
fi

# Eski systemd servisleri
systemctl stop bilsa-interactive-board.service 2>/dev/null || true
systemctl disable bilsa-interactive-board.service 2>/dev/null || true
systemctl --user stop bilsa-interactive-board.service 2>/dev/null || true
systemctl --user disable bilsa-interactive-board.service 2>/dev/null || true

# Eski uygulama dosyalarını sil (config'leri KORUYORUZ!)
if [ -d "$INSTALL_DIR" ]; then
    rm -rf "$INSTALL_DIR"
fi

# Config dosyaları artık PAYLAŞIMLI dizinde!
# /var/lib/bilsa-interactive-board/ - Tüm kullanıcılar yazabilir (sticky bit)
SHARED_CONFIG_DIR="/var/lib/bilsa-interactive-board"
SYSTEM_CONFIG_DIR="/etc/bilsa-interactive-board"
echo "  Paylaşımlı config dizini hazırlanıyor..."

echo -e "${GREEN}  ✓ Temizlik tamamlandı (config'ler KORUNDU)${NC}"

# 2. Uygulama dizinini oluştur ve dosyaları kopyala
echo -e "${YELLOW}[2/7] Uygulama dosyaları yükleniyor...${NC}"

mkdir -p "$INSTALL_DIR"
mkdir -p "${INSTALL_DIR}/Assets"

# TÜM dosyaları kopyala (native library'ler dahil)
cp -r "${SCRIPT_DIR}"/* "$INSTALL_DIR/" 2>/dev/null || true

# install.sh'ı kopyalama (gereksiz)
rm -f "${INSTALL_DIR}/install.sh" 2>/dev/null || true

# İzinler
chmod 755 "${INSTALL_DIR}/bilsa-interactive-board"
find "${INSTALL_DIR}" -name "*.so*" -exec chmod 755 {} \; 2>/dev/null || true
chmod 644 "${INSTALL_DIR}/appsettings.json"

FILE_COUNT=$(find "${INSTALL_DIR}" -type f | wc -l)
echo -e "${GREEN}  ✓ ${FILE_COUNT} dosya yüklendi${NC}"

# Paylaşımlı config dizinini oluştur (TÜM KULLANICILAR YAZABİLİR)
echo -e "${YELLOW}[2.5/7] Paylaşımlı config dizini oluşturuluyor...${NC}"

# Paylaşımlı dizin oluştur (sticky bit ile - 1777)
if [ ! -d "$SHARED_CONFIG_DIR" ]; then
    mkdir -p "$SHARED_CONFIG_DIR"
    echo "  ✓ Paylaşımlı config dizini oluşturuldu: $SHARED_CONFIG_DIR"
fi
chmod 1777 "$SHARED_CONFIG_DIR"
echo "  ✓ Dizin izinleri ayarlandı: 1777 (sticky bit - tüm kullanıcılar yazabilir)"

# Eski config'lerden migrasyon (öncelik: user > system > default)
MIGRATED=false

# 1. Önce kullanıcı config'lerini kontrol et (kayıtlı tahta bilgileri olabilir)
if [ ! -f "${SHARED_CONFIG_DIR}/appsettings.json" ]; then
    for user_home in /home/*; do
        if [ -f "${user_home}/.config/bilsa-interactive-board/appsettings.json" ]; then
            username=$(basename "$user_home")
            cp "${user_home}/.config/bilsa-interactive-board/appsettings.json" "${SHARED_CONFIG_DIR}/appsettings.json"
            echo -e "${GREEN}  ✓ Kullanıcı config'i migrasyon edildi: ${username}${NC}"
            MIGRATED=true
            break
        fi
    done
fi

# 2. Kullanıcı config yoksa, sistem config'den migrasyon
if [ "$MIGRATED" = false ] && [ ! -f "${SHARED_CONFIG_DIR}/appsettings.json" ]; then
    if [ -f "${SYSTEM_CONFIG_DIR}/appsettings.json" ]; then
        cp "${SYSTEM_CONFIG_DIR}/appsettings.json" "${SHARED_CONFIG_DIR}/appsettings.json"
        echo -e "${GREEN}  ✓ Sistem config'i migrasyon edildi${NC}"
        MIGRATED=true
    fi
fi

# 3. Hiçbiri yoksa default'tan kopyala
if [ "$MIGRATED" = false ] && [ ! -f "${SHARED_CONFIG_DIR}/appsettings.json" ]; then
    if [ -f "${INSTALL_DIR}/appsettings.json" ]; then
        cp "${INSTALL_DIR}/appsettings.json" "${SHARED_CONFIG_DIR}/appsettings.json"
        echo -e "${GREEN}  ✓ Varsayılan config kopyalandı${NC}"
    fi
fi

# Config dosyasına tüm kullanıcılar yazabilsin
if [ -f "${SHARED_CONFIG_DIR}/appsettings.json" ]; then
    chmod 666 "${SHARED_CONFIG_DIR}/appsettings.json"
    echo -e "${GREEN}  ✓ Config dosyası izinleri: 666 (tüm kullanıcılar yazabilir)${NC}"
fi

# Eski config konumlarını bilgilendir
echo ""
echo -e "${CYAN}  Config Bilgileri:${NC}"
echo -e "    Aktif config: ${SHARED_CONFIG_DIR}/appsettings.json"
if [ -f "${SYSTEM_CONFIG_DIR}/appsettings.json" ]; then
    echo -e "    ${YELLOW}Eski sistem config: ${SYSTEM_CONFIG_DIR}/appsettings.json (artık kullanılmıyor)${NC}"
fi
for user_home in /home/*; do
    if [ -f "${user_home}/.config/bilsa-interactive-board/appsettings.json" ]; then
        username=$(basename "$user_home")
        echo -e "    ${YELLOW}Eski kullanıcı config: ${username} (artık kullanılmıyor)${NC}"
    fi
done

# libSkiaSharp kontrolü
if ls "${INSTALL_DIR}"/libSkiaSharp* 1>/dev/null 2>&1; then
    echo -e "${GREEN}  ✓ libSkiaSharp native library bulundu${NC}"
fi

# 3. Zenity kurulumu (Otomatik güncelleme için gerekli)
echo -e "${YELLOW}[3/9] Zenity kontrol ediliyor (GUI güncelleme için)...${NC}"

if ! command -v zenity &> /dev/null; then
    echo "  Zenity kurulu değil, yükleniyor..."
    apt update -qq 2>/dev/null || true
    apt install -y zenity 2>/dev/null || true
    if command -v zenity &> /dev/null; then
        echo -e "${GREEN}  ✓ Zenity başarıyla kuruldu${NC}"
    else
        echo -e "${YELLOW}  ⚠ Zenity kurulamadı (internet bağlantısı gerekli, otomatik güncelleme etkilenebilir)${NC}"
    fi
else
    echo -e "${GREEN}  ✓ Zenity zaten kurulu${NC}"
fi

# 4. Sudoers kuralı (Otomatik güncelleme için şifresiz sudo)
echo -e "${YELLOW}[4/9] Otomatik güncelleme için sudoers kuralı ekleniyor...${NC}"

SUDOERS_FILE="/etc/sudoers.d/bilsa-update"
cat > "$SUDOERS_FILE" << 'EOF'
# Bilsa Interactive Board - Otomatik Güncelleme
# Sadece güncelleme scriptlerinin şifresiz çalışmasına izin ver
# Güvenlik: Sadece /tmp altındaki belirli scriptler
ALL ALL=(root) NOPASSWD: /bin/bash /tmp/bilsa-update-elevated.sh
EOF

chmod 440 "$SUDOERS_FILE"

# Sudoers dosyasını test et
if visudo -c -f "$SUDOERS_FILE" &>/dev/null; then
    echo -e "${GREEN}  ✓ Sudoers kuralı başarıyla eklendi${NC}"
    echo -e "${CYAN}  → Otomatik güncelleme artık şifre sormayacak${NC}"
else
    echo -e "${RED}  ✗ Sudoers kuralı eklenemedi (syntax hatası)${NC}"
    rm -f "$SUDOERS_FILE"
    echo -e "${YELLOW}  ⚠ Güncelleme için şifre sorulacak${NC}"
fi

# 5. Başlatma script'i
echo -e "${YELLOW}[5/9] Başlatma script'i oluşturuluyor...${NC}"

cat > "${INSTALL_DIR}/start-bilsa.sh" << 'STARTEOF'
#!/bin/bash
# Bilsa Etkileşimli Tahta - Başlatma Scripti
# Root olarak çalışıyorsa oturum açan kullanıcıya düşer

cd /opt/bilsa/interactive-board

# Zaten çalışıyorsa çık
if pgrep -x "bilsa-inter" > /dev/null 2>&1; then
    exit 0
fi

# Oturum açan kullanıcıyı bul
SESSION_USER=""
if [ -n "$SUDO_USER" ]; then
    SESSION_USER="$SUDO_USER"
elif [ -n "$LOGNAME" ] && [ "$LOGNAME" != "root" ]; then
    SESSION_USER="$LOGNAME"
elif who | grep -q "tty"; then
    SESSION_USER=$(who | grep "tty" | head -1 | awk '{print $1}')
elif who | grep -q ":"; then
    SESSION_USER=$(who | grep ":" | head -1 | awk '{print $1}')
fi

# Root olarak çalışıyorsa ve bir kullanıcı bulunduysa, o kullanıcı olarak başlat
if [ "$(id -u)" -eq 0 ] && [ -n "$SESSION_USER" ] && [ "$SESSION_USER" != "root" ]; then
    # Kullanıcının DISPLAY ve DBUS bilgilerini al
    USER_ID=$(id -u "$SESSION_USER" 2>/dev/null)
    if [ -n "$USER_ID" ]; then
        export DISPLAY="${DISPLAY:-:0}"
        export XAUTHORITY="/home/${SESSION_USER}/.Xauthority"
        export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${USER_ID}/bus"
        export XDG_RUNTIME_DIR="/run/user/${USER_ID}"
        su - "$SESSION_USER" -c "cd /opt/bilsa/interactive-board && DISPLAY=${DISPLAY} ./bilsa-interactive-board > /tmp/bilsa-board.log 2>&1 &"
        exit 0
    fi
fi

# Normal kullanıcı olarak veya kullanıcı bulunamazsa direkt başlat
exec ./bilsa-interactive-board > /tmp/bilsa-board.log 2>&1 &
STARTEOF
chmod 755 "${INSTALL_DIR}/start-bilsa.sh"

echo -e "${GREEN}  ✓ Başlatma script'i hazır (gecikme YOK)${NC}"

# 6. XDG Autostart
echo -e "${YELLOW}[6/9] Otomatik başlatma ayarlanıyor...${NC}"

# Sistem geneli autostart
mkdir -p /etc/xdg/autostart
cat > /etc/xdg/autostart/bilsa-interactive-board.desktop << 'EOF'
[Desktop Entry]
Type=Application
Name=Bilsa Etkileşimli Tahta
Name[tr]=Bilsa Etkileşimli Tahta
Comment=Otomatik Güncelleme Destekli Etkileşimli Tahta Sistemi
Exec=/opt/bilsa/interactive-board/start-bilsa.sh
Icon=/opt/bilsa/interactive-board/Assets/meb_logo.png
Path=/opt/bilsa/interactive-board
Terminal=false
Categories=Education;System;
StartupNotify=false
X-GNOME-Autostart-enabled=true
X-GNOME-Autostart-Phase=Applications
X-GNOME-Autostart-Delay=0
X-KDE-autostart-phase=0
X-MATE-Autostart-Phase=Initialization
X-XFCE-Autostart-Override=true
Hidden=false
NoDisplay=true
EOF
chmod 644 /etc/xdg/autostart/bilsa-interactive-board.desktop

# Tüm kullanıcılar için
for user_home in /home/*; do
    if [ -d "$user_home" ]; then
        username=$(basename "$user_home")
        user_autostart="${user_home}/.config/autostart"
        mkdir -p "$user_autostart"
        cp /etc/xdg/autostart/bilsa-interactive-board.desktop "$user_autostart/"
        chown -R "${username}:${username}" "$user_autostart" 2>/dev/null || true
    fi
done

echo -e "${GREEN}  ✓ XDG Autostart yapılandırıldı${NC}"

# 7. XFCE için ek ayarlar
if [[ "$DESKTOP_ENV" == *"XFCE"* ]] || [[ "$DESKTOP_ENV" == *"xfce"* ]]; then
    echo -e "${YELLOW}[7/9] XFCE özel ayarları...${NC}"
    
    XFCE_AUTOSTART_DIR="/etc/xdg/xfce4/xinitrc.d"
    mkdir -p "$XFCE_AUTOSTART_DIR"
    cat > "${XFCE_AUTOSTART_DIR}/99-bilsa-board.sh" << 'EOF'
#!/bin/bash
# Hemen başlat - güvenlik için gecikme yok!
/opt/bilsa/interactive-board/start-bilsa.sh &
EOF
    chmod 755 "${XFCE_AUTOSTART_DIR}/99-bilsa-board.sh"
    echo -e "${GREEN}  ✓ XFCE xinitrc autostart eklendi (gecikme YOK)${NC}"
else
    echo -e "${YELLOW}[7/9] XFCE tespit edilmedi, atlanıyor...${NC}"
fi

# 8. LightDM ayarları
if [ -d "/etc/lightdm" ]; then
    echo -e "${YELLOW}[8/9] LightDM ayarları...${NC}"
    
    LIGHTDM_SCRIPT="/etc/lightdm/session-setup.sh"
    
    if [ -f "$LIGHTDM_SCRIPT" ]; then
        if ! grep -q "bilsa-interactive-board" "$LIGHTDM_SCRIPT"; then
            echo "" >> "$LIGHTDM_SCRIPT"
            echo "# Bilsa Interactive Board (kullanıcı olarak başlat)" >> "$LIGHTDM_SCRIPT"
            echo "/opt/bilsa/interactive-board/start-bilsa.sh &" >> "$LIGHTDM_SCRIPT"
        fi
    else
        cat > "$LIGHTDM_SCRIPT" << 'EOF'
#!/bin/bash
# LightDM Session Setup

# Bilsa Interactive Board (kullanıcı olarak başlat)
/opt/bilsa/interactive-board/start-bilsa.sh &
EOF
        chmod 755 "$LIGHTDM_SCRIPT"
    fi
    
    echo -e "${GREEN}  ✓ LightDM session script yapılandırıldı${NC}"
else
    echo -e "${YELLOW}[8/9] LightDM tespit edilmedi, atlanıyor...${NC}"
fi

# 9. Menü kısayolu
echo -e "${YELLOW}[9/9] Menü kısayolu oluşturuluyor...${NC}"

cat > /usr/share/applications/bilsa-interactive-board.desktop << 'EOF'
[Desktop Entry]
Type=Application
Name=Bilsa Etkileşimli Tahta
Name[tr]=Bilsa Etkileşimli Tahta
Comment=Otomatik Güncelleme Destekli Etkileşimli Tahta Sistemi
Exec=/opt/bilsa/interactive-board/bilsa-interactive-board
Icon=/opt/bilsa/interactive-board/Assets/meb_logo.png
Path=/opt/bilsa/interactive-board
Terminal=false
Categories=Education;System;
EOF
chmod 644 /usr/share/applications/bilsa-interactive-board.desktop
update-desktop-database /usr/share/applications 2>/dev/null || true

echo -e "${GREEN}  ✓ Menü kısayolu oluşturuldu${NC}"

# Kurulum özeti
echo ""
echo -e "${BLUE}============================================================${NC}"
echo -e "${GREEN}  ✓ KURULUM BAŞARIYLA TAMAMLANDI!${NC}"
echo -e "${BLUE}============================================================${NC}"
echo ""
echo -e "${CYAN}Kurulum Bilgileri:${NC}"
echo "  Kurulum Dizini: ${INSTALL_DIR}"
echo "  Config Dizini: ${SHARED_CONFIG_DIR} (tüm kullanıcılar yazabilir)"
echo "  Versiyon: ${CURRENT_VERSION}"
echo "  Otomatik Güncelleme: AKTIF"
echo "  Güncelleme Sunucusu: akillitahtaupdate.bilsa.com.tr"
echo ""
echo -e "${YELLOW}Otomatik Başlatma Yöntemleri:${NC}"
echo "  ✓ XDG Autostart (Tüm Masaüstü Ortamları)"
echo "  ✓ Kullanıcı Autostart (~/.config/autostart/)"
if [[ "$DESKTOP_ENV" == *"XFCE"* ]]; then
    echo "  ✓ XFCE xinitrc.d"
fi
if [ -d "/etc/lightdm" ]; then
    echo "  ✓ LightDM Session Script"
fi
echo ""
echo -e "${GREEN}Yapılacaklar:${NC}"
echo ""
echo -e "  ${YELLOW}Seçenek 1: Sistemi yeniden başlatın (Önerilen)${NC}"
echo "     sudo reboot"
echo ""
echo -e "  ${YELLOW}Seçenek 2: Şimdi manuel başlatın${NC}"
echo "     /opt/bilsa/interactive-board/start-bilsa.sh"
echo ""
echo -e "${CYAN}Otomatik Güncelleme:${NC}"
echo "  • Uygulama her açılışta güncelleme kontrolü yapar"
echo "  • Yeni versiyon varsa güncelleme penceresi açılır"
echo "  • 'Güncelle' butonuna basarak otomatik güncelleyebilirsiniz"
echo ""
echo -e "${YELLOW}Loglar:${NC}"
echo "  /tmp/bilsa-board.log"
echo ""
echo -e "${BLUE}============================================================${NC}"
echo ""

exit 0
