#!/bin/sh

### Choose a distribution for 'auto'
AUTO_SELECTED_DISTRIBUTION=$(lsb_release -s -c 2>/dev/null || echo "stable")

if [ "$1" = '--deconfigure' ]; then
  echo '### Deconfigured sources.list(5) - feel free to adapt it to fit with your needs!' > /etc/apt/sources.list
  echo "deb http://ftp.debian.org/debian $AUTO_SELECTED_DISTRIBUTION main contrib" >> /etc/apt/sources.list
  echo "deb http://security.debian.org/ $AUTO_SELECTED_DISTRIBUTION/updates main contrib" >> /etc/apt/sources.list

  ### Drop out any additional repositories added by fliwi
  rm -f /etc/apt/sources.list.d/fliwi-apt-config-*.list 2>/dev/null || true

  ### Drop out our apt-keys
  rm -f /etc/apt/trusted.gpg.d/fliwi-AUTO-ADD-* 2>/dev/null || true
else
  ### First refresh our apt-keys
  rm -f /etc/apt/trusted.gpg.d/fliwi-AUTO-ADD-* 2>/dev/null || true
  if [ -d "/etc/fliwi/global/apt/gpg" ]; then
    for file in $(find /etc/fliwi/global/apt/gpg/ -type f -path /etc/fliwi/global/apt/gpg/*.gpg)
    do
      cp $file /etc/apt/trusted.gpg.d/fliwi-AUTO-ADD-$(basename $file)
    done
  fi

  ### Get our codenames
  debian_distribution=$(dig os.codenames.basics txt +short | sed -r 's/"//g')
  fliwi_distribution=$(dig cluster.codenames.basics txt +short | sed -r 's/"//g')
  optionals_distribution=$(dig optionals.codenames.basics txt +short | sed -r 's/"//g')

  if [ "$debian_distribution" = "" ] || \
     [ "$debian_distribution" = "auto" ]; then
    debian_distribution="$AUTO_SELECTED_DISTRIBUTION"
  fi

  if [ "$fliwi_distribution" = "" ] || \
     [ "$fliwi_distribution" = "auto" ]; then
    fliwi_distribution="$AUTO_SELECTED_DISTRIBUTION"
  fi

  if [ "$optionals_distribution" = "" ] || \
     [ "$optionals_distribution" = "auto" ]; then
    optionals_distribution="$AUTO_SELECTED_DISTRIBUTION"
  fi

  ### Generate a proper /etc/apt/sources.list
  echo "# Dynamic sources.list(5) file generated by $(basename $0)" > /etc/apt/sources.list
  echo '#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' >> /etc/apt/sources.list

  ### Debian itself
  echo "deb http://apt-cacher:3142/debian $debian_distribution main contrib non-free" >> /etc/apt/sources.list
  echo "deb http://apt-cacher:3142/security $debian_distribution/updates main contrib non-free" >> /etc/apt/sources.list

  ### The Fliwi repositories
  echo "deb http://apt-cacher:3142/fliwi $fliwi_distribution main contrib non-free" >> /etc/apt/sources.list
  echo "deb http://apt-cacher:3142/fliwi-indispensable-backports $fliwi_distribution main contrib non-free" >> /etc/apt/sources.list
  echo "deb http://apt-cacher:3142/fliwi-indispensable-foreports $fliwi_distribution main contrib non-free" >> /etc/apt/sources.list

  ### The Fliwi optional repositories
  for optional_repo in addons optional-backports optional-foreports
  do
    if [ $(dig fliwi-$optional_repo-repository.basics txt +short | grep -c -F 'enabled') -eq 1 ]; then
      echo "deb http://apt-cacher:3142/fliwi-$optional_repo $optionals_distribution main contrib non-free" >> /etc/apt/sources.list
    fi
  done

  ### Drop out any additional repositories added by fliwi
  rm -f /etc/apt/sources.list.d/fliwi-apt-config-*.list 2>/dev/null || true

  ### Add additional repositories
  for additional_repository_name in $(fliwi-get-additional-repositories --show-name)
  do
    repo_address=$(fliwi-get-additional-repositories --limit="$additional_repository_name" --show-address)
    repo_distribution=$(fliwi-get-additional-repositories --limit="$additional_repository_name" --show-distribution)
    repo_components=$(fliwi-get-additional-repositories --limit="$additional_repository_name" --show-components)

    if [ "$repo_distribution" = "auto" ]; then
      repo_distribution="$AUTO_SELECTED_DISTRIBUTION"
    fi

    check_http_code_option=''
    if [ $(echo $repo_address | grep -c -E -e '^http://') -eq 1 ]; then
      check_http_code_option='--fail'
    fi

    curl -s --connect-timeout 3 --max-time 10 $check_http_code_option "$repo_address/dists/$repo_distribution/Release" 1>/dev/null 2>&1
    if [ $? -ne 0 ]; then
      echo "# WARNING: Failed to retrieve release-file for '$additional_repository_name' - skipping it" 2>&1
      echo "##### URL: $repo_address/dists/$repo_distribution/Release" 2>&1
      continue
    fi

    echo "# Dynamic sources.list(5) file generated by $(basename $0)" > /etc/apt/sources.list.d/fliwi-apt-config-$additional_repository_name.list
    echo '#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' >> /etc/apt/sources.list.d/fliwi-apt-config-$additional_repository_name.list
    echo "# Repository: $additional_repository_name" >> /etc/apt/sources.list.d/fliwi-apt-config-$additional_repository_name.list
    echo "deb $repo_address $repo_distribution $repo_components" >> /etc/apt/sources.list.d/fliwi-apt-config-$additional_repository_name.list
  done
fi
