#!/bin/sh
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

MY_SERVER="https://share1-cs.dyndns.org/icam"
INSTALL_DIR="/usr/lib/enigma2/python/Plugins/Extensions/ICamPanel"
REGISTER_URL="$MY_SERVER/admin/register.php"

clear
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}  iCAM Complete Installer v4.2${NC}"
echo -e "${GREEN}  (Supporto DreamOS + Enigma2 Standard)${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""

# Verifica root
if [ "$(id -u)" != "0" ]; then
    echo -e "${RED}Devi essere root!${NC}"
    exit 1
fi

# Verifica connessione
echo -e "${BLUE}Verifica connessione...${NC}"
if ! wget -q --no-check-certificate --spider "$MY_SERVER" 2>/dev/null; then
    echo -e "${RED}Server non raggiungibile!${NC}"
    exit 1
fi
echo -e "${GREEN}? Server OK${NC}"
echo ""

# ?? Rilevamento Sistema Operativo
IS_DREAMOS=0
if [ -f /etc/dreambox-version ]; then
    IS_DREAMOS=1
    echo -e "${YELLOW}?? DreamOS rilevato${NC}"
elif command -v dpkg >/dev/null 2>&1 && ! command -v opkg >/dev/null 2>&1; then
    IS_DREAMOS=1
    echo -e "${YELLOW}?? DreamOS rilevato (via dpkg)${NC}"
else
    echo -e "${YELLOW}?? Enigma2 Standard rilevato${NC}"
fi

# Selezione architettura
echo -e "${YELLOW}============================================${NC}"
echo -e "${YELLOW}  SELEZIONA ARCHITETTURA${NC}"
echo -e "${YELLOW}============================================${NC}"
echo "1) ARM (Vu+, Zgemma H7/H9, Dreambox 900/920)"
echo "2) MIPS (Zgemma H5/H2S, VU+ Solo)"
echo ""
read -p "Scelta [1-2]: " ARCH_CHOICE

if [ "$ARCH_CHOICE" = "1" ]; then
    ARCH_TYPE="arm"
    BIN_FILE="ICAMITAARM"
    if [ "$IS_DREAMOS" -eq 1 ]; then
        # DreamOS usa il pacchetto .deb unico
        SOFTCAM_FILE="enigma2_softcams_oscam_all_images_11_668_emu_r798_arm+mips_all.deb"
        PKG_CMD="dpkg -i --force-overwrite"
        CONFIG_DIR="/etc/tuxbox/config/ICAMITA"
    else
        # Standard usa IPK + binario separato
        SOFTCAM_FILE="enigma2-softcams-icamita_1.0_all.ipk"
        LIB_FILE="libdvbcsa1_1_1_0+git64+b84e7900+b84e790a94_r0_1_cortexa15hf_neon.ipk"
        PKG_CMD="opkg install"
        CONFIG_DIR="/usr/keys/ICAMITA"
    fi
elif [ "$ARCH_CHOICE" = "2" ]; then
    ARCH_TYPE="mips"
    BIN_FILE="ICAMITAMIPS"
    if [ "$IS_DREAMOS" -eq 1 ]; then
        SOFTCAM_FILE="enigma2_softcams_oscam_all_images_11_668_emu_r798_arm+mips_all.deb"
        PKG_CMD="dpkg -i --force-overwrite"
        CONFIG_DIR="/etc/tuxbox/config/ICAMITA"
    else
        SOFTCAM_FILE="enigma2-softcams-icamita_1.0_mips.ipk"
        LIB_FILE="libdvbcsa1_1.1.0+git64+b84e7900+b84e790a94-r0.1_mips32el.ipk"
        PKG_CMD="opkg install"
        CONFIG_DIR="/usr/keys/ICAMITA"
    fi
else
    echo -e "${RED}Scelta non valida!${NC}"
    exit 1
fi
echo -e "${GREEN}? Architettura: $ARCH_TYPE${NC}"
echo -e "${GREEN}? Sistema: $([ "$IS_DREAMOS" -eq 1 ] && echo 'DreamOS' || echo 'Enigma2 Standard')${NC}"
echo ""

# Crea cartelle
mkdir -p "$CONFIG_DIR"
mkdir -p /usr/bin
mkdir -p /etc/enigma2
chmod 755 "$(dirname "$CONFIG_DIR")" "$CONFIG_DIR"

# 1. Installa Softcam
echo -e "${BLUE}Installazione Softcam...${NC}"
if [ "$IS_DREAMOS" -eq 0 ]; then
    # Standard: rimuovi vecchie versioni
    opkg remove enigma2-softcams-icamita >/dev/null 2>&1
fi

# Download e installazione
if ! wget -q --no-check-certificate "$MY_SERVER/install/$SOFTCAM_FILE" -O /tmp/softcam.pkg; then
    echo -e "${RED}Download Softcam fallito!${NC}"
    exit 1
fi

if $PKG_CMD /tmp/softcam.pkg >/dev/null 2>&1; then
    echo -e "${GREEN}? Softcam installata${NC}"
else
    echo -e "${YELLOW}? Softcam: installazione completata con avvisi${NC}"
fi
rm -f /tmp/softcam.pkg

# 2. Installa libdvbcsa (solo per Enigma2 Standard)
if [ "$IS_DREAMOS" -eq 0 ] && [ -n "$LIB_FILE" ]; then
    echo -e "${BLUE}Installazione libdvbcsa...${NC}"
    opkg remove libdvbcsa >/dev/null 2>&1
    if wget -q --no-check-certificate "$MY_SERVER/install/$LIB_FILE" -O /tmp/libdvbcsa.ipk; then
        opkg install /tmp/libdvbcsa.ipk >/dev/null 2>&1
        echo -e "${GREEN}? libdvbcsa installata${NC}"
    else
        echo -e "${YELLOW}? libdvbcsa: già presente o non necessaria${NC}"
    fi
    rm -f /tmp/libdvbcsa.ipk
fi

# 3. ?? INSTALLA BINARIO ICAMITA (FORZATO PER TUTTI)
echo -e "${BLUE}Installazione binario ICAMITA in /usr/bin/...${NC}"
rm -f /usr/bin/ICAMITA /usr/bin/oscam 2>/dev/null

if wget -q --no-check-certificate "$MY_SERVER/install/$BIN_FILE" -O /usr/bin/ICAMITA; then
    chmod 755 /usr/bin/ICAMITA
    
    # Crea symlink per compatibilità
    ln -sf /usr/bin/ICAMITA /usr/bin/oscam
    ln -sf /usr/bin/ICAMITA /usr/bin/ncam
    ln -sf /usr/bin/ICAMITA /usr/bin/softcam 2>/dev/null
    
    if [ -x /usr/bin/ICAMITA ]; then
        echo -e "${GREEN}? Binario installato: /usr/bin/ICAMITA${NC}"
        ls -la /usr/bin/ICAMITA | awk '{print "  Dimensione: "$5" byte"}'
    else
        echo -e "${RED}? Binario NON eseguibile!${NC}"
        exit 1
    fi
else
    echo -e "${RED}? Download binario fallito!${NC}"
    echo "  URL: $MY_SERVER/install/$BIN_FILE"
    exit 1
fi

# 4. Installa Whitelist
echo -e "${BLUE}Download whitelist...${NC}"
if wget -q --no-check-certificate "$MY_SERVER/whitelist_streamrelay" -O /etc/enigma2/whitelist_streamrelay; then
    chmod 644 /etc/enigma2/whitelist_streamrelay
    echo -e "${GREEN}? Whitelist installata in /etc/enigma2/${NC}"
else
    echo -e "${YELLOW}? Whitelist: download fallito (continua senza)${NC}"
    # Crea file vuoto per evitare errori
    touch /etc/enigma2/whitelist_streamrelay
fi
# 5. CREA CONFIGURAZIONE OSCam
echo -e "${BLUE}Installazione configurazione OSCam in $CONFIG_DIR...${NC}"

# oscam.conf
cat > "$CONFIG_DIR/oscam.conf" << 'OSCAMCONF'
[global]
logfile = /tmp/oscam.log
clienttimeout = 5000
fallbacktimeout = 5000
unlockparental = 1
nice = -1
maxlogsize = 50
preferlocalcards = 1
block_same_ip = 0
block_same_name = 0
lb_mode = 1
disablecrccws = 1
disablecrccws_only_for = 0500:050F00;098C:000000;09C4:000000;098D:000000;1838:000000;09CD:000000

[streamrelay]
stream_relay_enabled = 1
stream_relay_ctab = 098D,09CD
stream_relay_deb_time = 1000
stream_hide_client = 1

[dvbapi]
enabled = 1
au = 1
pmt_mode = 6
request_mode = 1
delayer = 60
user = dvbapiau
read_sdt = 1
extended_cw_api = 2
demuxer_fix = 1
boxtype = Dreambox

[webif]
httpport = 16001
httpuser = root
httppwd = root
httphelplang = it
httpallowed = 127.0.0.1,0.0.0.0-254.254.254.254
http_status_log = 1

[cccam]
port = 12007
version = 2.3.0
reshare = 1
stealth = 1
keepalive = 1
OSCAMCONF

# oscam.server
cat > "$CONFIG_DIR/oscam.server" << 'OSCAMSERVER'
[reader]
label = reader0
enable = 0
protocol = internal
device = /dev/sci0
boxkey = 3737373737373737
rsakey = A92DA72FEEACF2947B003ED652153B189E4043B0138C368BDF6B9ED77DDAD6C0761A2198AEB3FC97A19C9D01CA769B3FFFE4F6E70FA4E0696A8980E18D8C58E11D817121346E3E66457FDD84CFA72589B25B538EFC304361B54845F39E9EFA52D805E5FD86B595B366C35716ABC91FA3DC159C9F4D8164B5
detect = cd
nagra_read = 2
mhz = 450
cardmhz = 2700
group = 1
emmcache = 1,3,2,0
dropbadcws = 1

[reader]
label = reader1
enable = 0
protocol = internal
device = /dev/sci1
detect = cd
mhz = 450
cardmhz = 2700
group = 1

[reader]
label = Line-skyde
protocol = cccam
device = share1-cs.dyndns.org,12007
user = skyde
password = icam
inactivitytimeout = 30
group = 1
cccversion = 2.3.0
ccckeepalive = 1
cccreshare = 0

[reader]
label = emulator
protocol = emu
device = emulator
disablecrccws_only_for = 0E00:000000
caid = 0500,0604,0D00,0E00,1010,1801,2600,2602,2610,0B01
detect = cd
ident = 0500:020A00,021110;0604:000000;0D00:0000C0;0E00:000000;1010:000000;1801:000000,001101,002111,007301;2600:000000;2602:000000;2610:000000;0B01:000000
group = 1
emmcache = 2,1,2,1
emu_auproviders = 0604:010200;0E00:000000;1010:000000;2610:000000
OSCAMSERVER

# oscam.user
cat > "$CONFIG_DIR/oscam.user" << 'OSCAMUSER'
[account]
user = dvbapiau
uniq = 3
au = Line-skyde,reader0,reader1,emulator
emmreassembly = 1
group = 1
OSCAMUSER

chmod 644 "$CONFIG_DIR/oscam.*"
echo -e "${GREEN}? Configurazione OSCam installata in $CONFIG_DIR${NC}"

# Symlink per compatibilità percorsi
mkdir -p /usr/keys
ln -sf "$CONFIG_DIR" /usr/keys/ICAMITA 2>/dev/null

# 6. CREA SCRIPT DI AVVIO (per menu softcam)
echo -e "${BLUE}Creazione script di avvio...${NC}"
if [ "$IS_DREAMOS" -eq 1 ]; then
    # DreamOS: init.d
    cat > /etc/init.d/softcam.icamita << 'INITD'
#!/bin/sh
case "$1" in
    start) /usr/bin/ICAMITA -c /usr/keys/ICAMITA & ;;
    stop) killall -9 ICAMITA oscam 2>/dev/null ;;
    restart) $0 stop; sleep 2; $0 start ;;
esac
exit 0
INITD
    chmod 755 /etc/init.d/softcam.icamita
else
    # Standard: init.d generico
    [ -d /etc/init.d ] && cat > /etc/init.d/softcam << 'INITD2'
#!/bin/sh
case "$1" in
    start) /usr/bin/ICAMITA -c /usr/keys/ICAMITA & ;;
    stop) killall -9 ICAMITA oscam 2>/dev/null ;;
    restart) $0 stop; sleep 2; $0 start ;;
esac
INITD2
    [ -d /etc/init.d ] && chmod 755 /etc/init.d/softcam
fi
echo -e "${GREEN}? Script di avvio creato${NC}"

# 7. Installa Plugin Python
echo -e "${BLUE}Installazione Plugin Python...${NC}"
mkdir -p "$INSTALL_DIR"
if wget -q --no-check-certificate "$MY_SERVER/plugin.py" -O "$INSTALL_DIR/plugin.py" 2>/dev/null; then
    chmod 755 "$INSTALL_DIR/plugin.py"
    echo -e "${GREEN}? Plugin Python installato${NC}"
else
    echo -e "${YELLOW}? Plugin non scaricato${NC}"
fi

# 8. Registra MAC
echo -e "${BLUE}Rilevamento MAC...${NC}"
MY_MAC=""
for iface in $(ls /sys/class/net/ 2>/dev/null | grep -E '^(eth|wlan)'); do
    [ -f "/sys/class/net/$iface/address" ] && MY_MAC=$(cat "/sys/class/net/$iface/address" 2>/dev/null | tr '[:lower:]' '[:upper:]')
    [ -n "$MY_MAC" ] && [ "$MY_MAC" != "00:00:00:00:00:00" ] && break
done

if [ -n "$MY_MAC" ] && [ "${#MY_MAC}" -eq 17 ]; then
    echo -e "${GREEN}? MAC: $MY_MAC${NC}"
    wget -q --no-check-certificate --timeout=5 -O /dev/null "$REGISTER_URL?mac=$MY_MAC" &
    echo -e "${GREEN}? MAC registrato${NC}"
else
    echo -e "${YELLOW}? MAC non rilevato${NC}"
fi

# 9. AVVIA OSCam
echo -e "${BLUE}Avvio automatico OSCam...${NC}"
killall -9 oscam ICAMITA 2>/dev/null
sleep 2

if [ -f /usr/bin/ICAMITA ]; then
    /usr/bin/ICAMITA -c /usr/keys/ICAMITA &
    sleep 2
    if ps | grep -v grep | grep -q ICAMITA; then
        echo -e "${GREEN}? OSCam avviato e in esecuzione${NC}"
    else
        echo -e "${YELLOW}? OSCam non si è avviato automaticamente${NC}"
    fi
fi

# 10. Fine
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}  INSTALLAZIONE COMPLETATA!${NC}"
echo -e "${GREEN}  Struttura creata:${NC}"
echo -e "${GREEN}    /usr/bin/ICAMITA (binario)${NC}"
echo -e "${GREEN}    $CONFIG_DIR/ (config)${NC}"
echo -e "${GREEN}============================================${NC}"
echo ""
echo -e "${YELLOW}Riavvio Enigma2 in 3 secondi...${NC}"
sleep 3

if [ "$IS_DREAMOS" -eq 1 ]; then
    systemctl restart enigma2 2>/dev/null || killall -9 enigma2
else
    killall -9 enigma2
fi