class apt::params {

  if $::osfamily != 'Debian' {
    fail('This module only works on Debian or derivatives like Ubuntu')
  }

  # prior to puppet 3.5.0, defined couldn't test if a variable was defined
  # strict variables wasn't added until 3.5.0, so this should be fine.
  if ! $::settings::strict_variables {
    $xfacts = {
      'lsbdistcodename'     => $::lsbdistcodename,
      'lsbdistrelease'      => $::lsbdistrelease,
      'lsbmajdistrelease'   => $::lsbmajdistrelease,
      'lsbdistdescription'  => $::lsbdistdescription,
      'lsbminordistrelease' => $::lsbminordistrelease,
      'lsbdistid'           => $::lsbdistid,
    }
  } else {
    # Strict variables facts lookup compatibility
    $xfacts = {
      'lsbdistcodename' => defined('$lsbdistcodename') ? {
        true    => $::lsbdistcodename,
        default => undef,
      },
      'lsbdistrelease' => defined('$lsbdistrelease') ? {
        true    => $::lsbdistrelease,
        default => undef,
      },
      'lsbmajdistrelease' => defined('$lsbmajdistrelease') ? {
        true    => $::lsbmajdistrelease,
        default => undef,
      },
      'lsbdistdescription' => defined('$lsbdistdescription') ? {
        true    => $::lsbdistdescription,
        default => undef,
      },
      'lsbminordistrelease' => defined('$lsbminordistrelease') ? {
        true    => $::lsbminordistrelease,
        default => undef,
      },
      'lsbdistid' => defined('$lsbdistid') ? {
        true    => $::lsbdistid,
        default => undef,
      },
    }
  }

  $root           = '/etc/apt'
  $provider       = '/usr/bin/apt-get'
  $sources_list   = "${root}/sources.list"
  $sources_list_d = "${root}/sources.list.d"
  $conf_d         = "${root}/apt.conf.d"
  $preferences    = "${root}/preferences"
  $preferences_d  = "${root}/preferences.d"
  $keyserver      = 'keyserver.ubuntu.com'

  $config_files = {
    'conf'   => {
      'path' => $conf_d,
      'ext'  => '',
    },
    'pref'   => {
      'path' => $preferences_d,
      'ext'  => '.pref',
    },
    'list'   => {
      'path' => $sources_list_d,
      'ext'  => '.list',
    }
  }

  $update_defaults = {
    'frequency' => 'reluctantly',
    'timeout'   => undef,
    'tries'     => undef,
  }

  $proxy_defaults = {
    'ensure' => undef,
    'host'   => undef,
    'port'   => 8080,
    'https'  => false,
  }

  $purge_defaults = {
    'sources.list'   => false,
    'sources.list.d' => false,
    'preferences'    => false,
    'preferences.d'  => false,
  }

  $source_key_defaults = {
    'server'  => $keyserver,
    'options' => undef,
    'content' => undef,
    'source'  => undef,
  }

  $include_defaults = {
    'deb' => true,
    'src' => false,
  }

  case $xfacts['lsbdistid'] {
    'debian': {
      case $xfacts['lsbdistcodename'] {
        'squeeze': {
          $backports = {
            'location' => 'http://httpredir.debian.org/debian-backports',
            'key'      => 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553',
            'repos'    => 'main contrib non-free',
          }
        }
        default: {
          $backports = {
            'location' => 'http://httpredir.debian.org/debian',
            'key'      => 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553',
            'repos'    => 'main contrib non-free',
          }
        }
      }

      $ppa_options = undef
      $ppa_package = undef

    }
    'ubuntu': {
      $backports = {
        'location' => 'http://archive.ubuntu.com/ubuntu',
        'key'      => '630239CC130E1A7FD81A27B140976EAF437D05B5',
        'repos'    => 'main universe multiverse restricted',
      }

      case $xfacts['lsbdistcodename'] {
        'lucid': {
          $ppa_options        = undef
          $ppa_package        = 'python-software-properties'
        }
        'precise': {
          $ppa_options        = '-y'
          $ppa_package        = 'python-software-properties'
        }
        'trusty', 'utopic', 'vivid': {
          $ppa_options        = '-y'
          $ppa_package        = 'software-properties-common'
        }
        default: {
          $ppa_options        = '-y'
          $ppa_package        = 'python-software-properties'
        }
      }
    }
    undef: {
      fail('Unable to determine lsbdistid, please install lsb-release first')
    }
    default: {
      $ppa_options = undef
      $ppa_package = undef
      $backports   = undef
    }
  }
}
