#!/bin/bash
# fetch_mt7612_complete.sh
# Próbuje pobrać kompletne źródła MT7612U (oryginalny pakiet MediaTek, potem kilka forków)
# Sprawdza, czy po rozpakowaniu istnieje rt_config.h (wymagany plik).
# Jeśli znajdzie komplet, tworzy ZIP w /tmp/mt7612_complete.zip
#
# Użycie: chmod +x fetch_mt7612_complete.sh && ./fetch_mt7612_complete.sh
set -euo pipefail

WORKDIR="$HOME/mt7612_fetch"
mkdir -p "$WORKDIR"
cd "$WORKDIR"

log() { echo "[$(date +'%F %T')] $*"; }

# Lista prób (kolejność: oryginalny CDN MediaTek, archive.org item, kilka repo ZIPów)
SOURCES=(
  "https://cdn-cw.mediatek.com/Downloads/linux/MT7612U_DPO_LinuxSTA_3.0.0.1_20140718.tar.bz2"
  "https://codeload.github.com/caruofc/MT7612U-Driver/zip/refs/heads/master"
  "https://codeload.github.com/apxii/mt7612u/zip/refs/heads/master"
  "https://codeload.github.com/classicsc/mt7612u/zip/refs/heads/master"
  "https://codeload.github.com/ulli-kroll/mt7612u/zip/refs/heads/master"
  "https://codeload.github.com/leedexun/LB-LINK-H16/zip/refs/heads/master"
)

FOUND=0
OUTDIR=""
for src in "${SOURCES[@]}"; do
  log "Próbuję pobrać: $src"
  fname="$(basename "$src")"
  # normalize names ending with refs/heads/master -> master.zip
  if [[ "$src" == *"refs/heads/master" ]]; then
    fname="$(echo "$src" | sed -E 's#.*/([^/]+)/zip/refs/heads/master#\1-master.zip#')"
  fi
  rm -f "$fname"
  if command -v curl >/dev/null 2>&1; then
    if curl -fSL -o "$fname" "$src" 2>/dev/null; then
      log "Pobrano $fname"
    else
      log "Nie udało się pobrać $src (curl)"
      continue
    fi
  else
    if wget -q -O "$fname" "$src"; then
      log "Pobrano $fname"
    else
      log "Nie udało się pobrać $src (wget)"
      continue
    fi
  fi

  # rozpakuj w tmp
  TMP="${WORKDIR}/tmp_unpack"
  rm -rf "$TMP" && mkdir -p "$TMP"
  case "$fname" in
    *.tar.bz2) tar -xjf "$fname" -C "$TMP" || true ;;
    *.tar.gz) tar -xzf "$fname" -C "$TMP" || true ;;
    *.zip|*-master.zip) unzip -q "$fname" -d "$TMP" || true ;;
    *) log "Nieznany format: $fname - pomijam"; continue ;;
  esac

  # znajdź rt_config.h
  found_file=$(find "$TMP" -type f -name rt_config.h -print -quit || true)
  if [ -n "$found_file" ]; then
    log "Znaleziono rt_config.h: $found_file"
    # ustaw OUTDIR jako katalog zawierający źródła (najwyższy katalog zawierający common/ os/ include/ itp.)
    # jeśli tar rozpakował katalog DPO/... to wybieramy pierwszy katalog
    candidate_dir=$(find "$TMP" -maxdepth 2 -type d -name "*" | sed -n '1p' || true)
    # lepiej: jeśli w TMP istnieje podkatalog z common os include -> użyj go
    if [ -d "$TMP/common" ] || [ -d "$TMP/DPO" ] || [ -d "$TMP/mt7612u-master" ]; then
      # wybierz katalog zawierający rt_config.h jako bazowy
      OUTDIR=$(dirname "$found_file")
      OUTDIR=$(cd "$OUTDIR" && pwd)
      # jeżeli rt_config.h jest w include/ lub similar, wejdziemy dwa poziomy wyżej
      # spróbuj znaleźć katalog zawierający 'common' obok
      maybe_root=$(dirname "$OUTDIR")
      if [ -d "$maybe_root/common" ]; then
        OUTDIR="$maybe_root"
      else
        # fallback: pierwszy katalog w tmp
        first_dir=$(find "$TMP" -maxdepth 1 -mindepth 1 -type d | head -n1 | sed -n '1p' || true)
        [ -n "$first_dir" ] && OUTDIR="$first_dir"
      fi
    else
      OUTDIR=$(dirname "$found_file")
    fi

    log "Wybrano katalog źródłowy: $OUTDIR"
    FOUND=1
    break
  else
    log "rt_config.h nie znaleziono w $fname"
    rm -rf "$TMP"
    continue
  fi
done

if [ "$FOUND" -ne 1 ]; then
  log "Nie udało się znaleźć kompletnego archiwum zawierającego rt_config.h."
  log "Spróbuj pobrać ręcznie oryginalny plik: https://cdn-cw.mediatek.com/Downloads/linux/MT7612U_DPO_LinuxSTA_3.0.0.1_20140718.tar.bz2"
  exit 2
fi

# Stwórz ZIP z kompletnymi źródłami
ZIPOUT="/tmp/mt7612_complete.zip"
rm -f "$ZIPOUT"
log "Tworzę ZIP: $ZIPOUT z zawartości $OUTDIR"
( cd "$OUTDIR" && zip -r "$ZIPOUT" . >/dev/null )
if [ -f "$ZIPOUT" ]; then
  log "Gotowe. ZIP: $ZIPOUT"
  echo
  log "Sprawdź plik /tmp/mt7612_complete.zip i prześlij go tam gdzie potrzebujesz."
  exit 0
else
  log "Nie udało się utworzyć ZIP."
  exit 3
fi
