#!/bin/bash

# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

NULL="none"

# Update this variable each time version is bumped up
VERSION="0.5.3-1"

SERVER=0
WORKBENCH=1
UTILITIES=2
CONNECTOR_PYTHON=3
CONNECTOR_ODBC=4
ROUTER=5

PKG_LIST[${SERVER}]="mysql-server-5.5:mysql-server-5.6:mysql-community-server:mysql-commercial-server"
PKG_LIST[${WORKBENCH}]="mysql-workbench:mysql-workbench-community"
PKG_LIST[${UTILITIES}]="mysql-utilities-community"
PKG_LIST[${CONNECTOR_PYTHON}]="python-mysql.connector"
PKG_LIST[${CONNECTOR_ODBC}]=""
PKG_LIST[${ROUTER}]=""

CHOICES[${SERVER}]=""
CHOICES[${WORKBENCH}]=""
CHOICES[${UTILITIES}]=""
CHOICES[${CONNECTOR_PYTHON}]=""
CHOICES[${CONNECTOR_ODBC}]=""
CHOICES[${ROUTER}]=""

declare -A PRODUCT_LIST=()

download_platform_data () {
	PLATFORM=$(lsb_release -cs)
	FLAG=0
	COMPONENTS="Components"
	TEXT=""

	IFS_BACKUP=${IFS}
	IFS=$'\n'
	for LINE in $(wget -O- -q http://repo.mysql.com/apt/${1}/conf/distributions)
	do
		if [ "${FLAG}" == "0" ] && [ -z "${LINE##*$PLATFORM*}" ];
		then
			FLAG=1
			continue
		fi
		if [ "${FLAG}" == "1" ] && [ -z "${LINE##*$COMPONENTS*}" ];
		then
			COMPONENTS="${LINE}"
			break
		fi
	done
	IFS=${IFS_BACKUP}
	COMPONENTS=$(echo ${COMPONENTS} | cut -d':' -f2 | cut -d' ' -f2-)

	echo "${COMPONENTS}"
}

extract_product_data () {
	for COMPONENT in ${1}
	do
		IFS_BACKUP=${IFS}
		IFS="-"
		PRODUCT=
		VERSION=
		for WORD in ${COMPONENT}
		do
			if [ "${WORD}" == "dmr" ];
			then
				VERSION=${VERSION}-${WORD}
			elif [[ "${WORD}" =~ ^[0-9].[0-9]$ ]]
			then
				VERSION=${WORD}
			elif [ -z "${PRODUCT}" ];
			then
				PRODUCT=${PRODUCT}${WORD}
			else
				PRODUCT=${PRODUCT}-${WORD}
			fi
		done
		if [ -z "${PRODUCT_LIST[${PRODUCT}]}" ];
		then
			PRODUCT_LIST[${PRODUCT}]="${VERSION}"
		else
			PRODUCT_LIST[${PRODUCT}]="${PRODUCT_LIST[${PRODUCT}]}, ${VERSION}"
		fi
		IFS=${IFS_BACKUP}
	done
}

get_product_display_list() {
	unset LIST
	TEXT=$(for WORD in ${1}
		do
			if [ ! -z "${PRODUCT_LIST[${WORD}]}" ] && [ "${WORD}" != "mysql" ];
			then
				echo ${WORD}
			fi
		done | sort)
	for PRODUCT in ${TEXT};
	do
		LIST=$(echo "${LIST}${PRODUCT}, ")
	done
	#LIST="${LIST//-/ }"
	echo "Server, ${LIST}Apply"
}

get_product_list() {
	unset LIST
	TEXT=$(for WORD in ${1}
		do
			if [ ! -z "${PRODUCT_LIST[${WORD}]}" ];
			then
				echo ${WORD}
			fi
		done | sort)
	for PRODUCT in ${TEXT};
	do
		LIST=$(echo "${LIST}${PRODUCT} ")
	done
	echo "${LIST}"
}

get_version_list () {
	unset LIST
	for VERSION in ${PRODUCT_LIST[${1}]}
	do
		echo "VERSION=${VERSION}" >> /tmp/VERSION
		LIST="${LIST} ${1}-${VERSION}"
	done
	echo "${LIST}, ${NULL}"
}

get_installed_version() {
	INSTALLED_PKG=${NULL}
	INSTALLED_PKG_VERSION=${NULL}

	IFS_BACKUP=${IFS}
	IFS=":"
	for PKG in ${1};
	do
		STATUS=$(dpkg -s $PKG 2> /dev/null | grep Status: | cut -d' ' -f4)
		if [ "$STATUS" = "installed" ];
		then
			INSTALLED_PKG=$PKG
		fi
	done
	IFS=${IFS_BACKUP}

	if [ "${INSTALLED_PKG}" != "${NULL}" ];
	then
		INSTALLED_PKG_VERSION=$(dpkg -s $INSTALLED_PKG 2> /dev/null | grep Version: | cut -d' ' -f2 | cut -d. -f-2)
	fi

	echo ${INSTALLED_PKG_VERSION}
}

auto_select_version() {
	ENABLE_REPO=${NULL}

	case "${1}" in
	${SERVER})
		ENABLE_REPO=$(auto_select_server_version ${2})
		;;
	${WORKBENCH})
		ENABLE_REPO=$(auto_select_workbench_version ${2})
		;;
	${UTILITIES})
		ENABLE_REPO=$(auto_select_utilities_version ${2})
		;;
	${CONNECTOR_PYTHON})
		ENABLE_REPO=$(auto_select_connector_python_version ${2})
		;;
	${CONNECTOR_ODBC})
		ENABLE_REPO=$(auto_select_connector_odbc_version ${2})
		;;
	${ROUTER})
		ENABLE_REPO=$(auto_select_router_version ${2})
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_server_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	5.1)
		ENABLE_REPO=${NULL}
		;;
	5.5)
		ENABLE_REPO="mysql-5.6"
		;;
	5.6)
		ENABLE_REPO="mysql-5.6"
		;;
	5.7)
		ENABLE_REPO="mysql-5.7"
		;;
	none)
		ENABLE_REPO="mysql-5.7"
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_workbench_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	5.2)
		ENABLE_REPO=${NULL}
		;;
	6.2)
		ENABLE_REPO="workbench-6.3"
		;;
	6.3)
		ENABLE_REPO="workbench-6.3"
		;;
	none)
		ENABLE_REPO=${NULL}
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_utilities_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	1.5)
		ENABLE_REPO=${NULL}
		;;
	none)
		ENABLE_REPO=${NULL}
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_connector_python_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	2.0)
		ENABLE_REPO=${NULL}
		;;
	none)
		ENABLE_REPO=${NULL}
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_connector_odbc_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	x.x)
		ENABLE_REPO="connector-odbc-x.x"
		;;
	none)
		ENABLE_REPO="connector-odbc-x.x"
		;;
	esac

	echo ${ENABLE_REPO}
}

auto_select_router_version () {
	ENABLE_REPO=${NULL}

	case "${1}" in
	2.0)
		ENABLE_REPO=${NULL}
		;;
	none)
		ENABLE_REPO=${NULL}
		;;
	esac
	echo ${ENABLE_REPO}
}

