#!/usr/bin/env bash
set -x
sudo apt install -y \
	dh-autoreconf \
	dh-make \
	check \
	bluez \
	bluetooth \
	bluez-tools

sudo apt install -y libbluetooth-dev \
	libbsd-dev \
	libusb-dev \
	libglib2.0-dev \
	libudev-dev \
	libdbus-1-dev \
	libical-dev \
	libmp3lame-dev \
	libmpg123-dev \
	libncurses-dev \
	libfdk-aac-dev \
	libreadline-dev \
	libsbc1 \
	libfdk-aac-dev \
	libsbc-dev \
	libasound2-dev \
	libortp-dev

USER="Arkq"
PROJECT="bluez-alsa"
LICENSE="mit"
SECTION="admin"
HOMEPAGE="http://www.bluez.org"
BUILD_HOME="/var/tmp/bluez-alsa-git_build"
#VERSION="2.1.0"
PACKAGE="bluealsa"
VERSION=$(curl "https://api.github.com/repos/${USER}/${PROJECT}/tags?per_page=5" | jq -r '.[0] | .name')
VERSION=${VERSION:1} # strip the preceding 'v'
DEBEMAIL="person@company.tld"
DEBFULLNAME="Testy McTester"
DESCRIPTION="Integration between BlueZ and ALSA."
LONG_DESCRIPTION=" With BlueALSA one can achieve the same goal as with PulseAudio, but with fewer\n dependencies and less overhead. BlueALSA registers all known Bluetooth audio\n profiles in BlueZ, so in theory every Bluetooth audio device can be connected.\n In order to access the audio stream, one has to connect to the ALSA PCM device\n called bluealsa."

RSS_FEED="https://github.com/${USER}/${PROJECT}/releases.atom"
# xdg-open ${RSS_FEED}
echo ${RSS_FEED}

# Disable discoverable timeout in the main.conf from the bluez package
sed -i 's,^\(DiscoverableTimeout = \).*,\1'\"0\"',' /etc/bluetooth/main.conf

# Make the BUILD_HOME directory and clone upstream
mkdir -p ${BUILD_HOME}
cd ${BUILD_HOME} || exit

git clone http://github.com/${USER}/${PROJECT}.git ${PACKAGE}-${VERSION}

cd ${PACKAGE}-${VERSION} || exit

mkdir -p m4

cat <<EOF >.git/gbp.conf
[DEFAULT]
# this is the upstream-branch:
upstream-branch=master
EOF

# debianize the BUILD_HOME directory
echo ${DEBFULLNAME}
dh_make \
	--createorig \
	--single \
	--native \
	--copyright ${LICENSE} \
	--yes

# Customize the debian directory values
#sed -i 's,^\(Description: \).*,\1'${DESCRIPTION}',' debian/control
sed -i "s,^\(Description: \).*,\1${DESCRIPTION}," debian/control
sed -i 's,^\(Section: \).*,\1'${SECTION}',' debian/control
sed -i "s,^\(Maintainer: \).*,\1'${DEBFULLNAME}\ \<${DEBEMAIL}\>'," debian/control
sed -i 's,^\(Homepage: \).*,\1'${HOMEPAGE}',' debian/control
sed -i "s/.*insert\ long.*/${LONG_DESCRIPTION}/" debian/control

echo ****************
cat debian/control
echo ****************

BUILD_OPTIONS="--enable-aac --enable-ofono --enable-debug"

cat <<EOF >debian/rules
#!/usr/bin/make -f
%:
	dh \$@

override_dh_auto_configure:
	dh_auto_configure -- ${BUILD_OPTIONS}
EOF

cat <<EOF >debian/watch
version=4
opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/${PROJECT}-$1\.tar\.gz/ \
  http://github.com/${USER}/${PROJECT}/tags .*/v?(\d\S+)\.tar\.gz
EOF

dpkg-buildpackage -us -uc -b

echo ${PACKAGE}_${VERSION}_amd64.deb

sudo dpkg -i ../${PACKAGE}_${VERSION}_amd64.deb

sudo apt install -y \
	libbluetooth-dev \
	libbsd-dev \
	libusb-dev \
	libglib2.0-dev \
	libudev-dev \
	libdbus-1-dev \
	libical-dev \
	libmp3lame-dev \
	libmpg123-dev \
	libncurses-dev \
	libfdk-aac-dev \
	libreadline-dev \
	libsbc1 \
	libfdk-aac-dev \
	libsbc-dev \
	libasound2-dev \
	libortp-dev

#-------------------------------------------------------------------------------
## grep bluealsa /etc/passwd
#bluealsa:x:129:962:added by portage for bluez-alsa:/dev/null:/sbin/nologin
## grep bluealsa /etc/group
#bluealsa:x:962:
#-------------------------------------------------------------------------------

cat >/etc/init.d/bluealsa <<'EOF'
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

pidfile="/var/run/bluealsa.pid"
command="/usr/bin/bluealsa"
command_args="${BLUEALSA_CONF}"
command_background="true"

depend() {
	after bluetooth
	need dbus localmount
}

start_pre() {
	checkpath -q -D -m 0770 -o :audio /var/run/bluealsa
}
EOF
#-------------------------------------------------------------------------------
## When BlueALSA has been created, then you can start BlueALSA as background task:
#bluealsa --disable-hfp &

# Now - for using your bluetooth-speaker/headset - with BlueALSA you have to intoduce the device to the bluetooth-stack using bluetoothctl:
# bluetoothctl >
# scan on
# [NEW] Device 30:23:23:F4:48:2C TH-S10U
# scan off
# pair 30:23:23:F4:48:2C
# trust 30:23:23:F4:48:2C
# exit

# After that power off&on the bt-speaker device and the device will connect automatically as a trusted device.

# Before we try our first audio-command we had to export one thing to make BlueALSA more system-friendly:
#export LIBASOUND_THREAD_SAFE=0

# autostart bluealsa
#cat <<EOF > /etc/rc.local
## Start bluealsa as root <http://github.com/Arkq/bluez-alsa>
#export LIBASOUND_THREAD_SAFE=0
#/usr/bin/bluealsa -S &
#EOF

gawk -i inplace '
/^exit 0/ {
    print "export LIBASOUND_THREAD_SAFE=0"
    print "/usr/bin/bluealsa -S &"
    print ""
}
{ print }
' /etc/rc.local

# Text to speech:

# espeak "Hello, how are you?" -w /home/guido/espeak.wav -s145
# aplay -D bluealsa:HCI=hci0,DEV=30:23:23:F4:48:2C,PROFILE=a2dp /home/guido/espeak.wav

# arecord -D bluealsa capture.wav

# bluealsa-aplay XX:XX:XX:XX:XX:XX

# $ aplay -D bluealsa:SRV=org.bluealsa,DEV=XX:XX:XX:XX:XX:XX,PROFILE=sco Bourree_in_E_minor.wav

# amixer -D bluealsa sset '<control name>' 70%
# amixer -D bluealsa sset 'Jabra MOVE v2.3.0 - A2DP' 50%

# Internetradio:

# mpg123 -a bluealsa:HCI=hci0,DEV=30:23:23:F4:48:2C,PROFILE=a2dp -@ /home/guido/ffh80s.pls

# For shorting the command you could create a ~/.asoundrc with the following content:

# defaults.bluealsa.interface "hci0"
# defaults.bluealsa.device "30:23:23:F4:48:2C"
# defaults.bluealsa.profile "a2dp"
# defaults.bluealsa.delay 10000

# Now you can the shorter version of the command:

# mpg123 -a bluealsa -@ /home/guido/ffh80s.pls

# For set the volume of such a device you have to know the "real" name of the device out of the bluetoothctl and the name of the used protocol:

# Device: 30:23:23:F4:48:2C TH-S10U
# Protocol: A2DP
# amixer -D bluealsa sset 'TH-S10U - A2DP ' 70%

#------------------------------------------------------------------------
## ldacBT
##
## AOSP libldac dispatcher
## https://android.googlesource.com/platform/external/libldac
## http://github.com/EHfive/ldacBT

#git clone http://github.com/EHfive/ldacBT.git
#cd ldacBT
#git submodule update --init
#
#mkdir build && cd build
#cmake \
#    -DCMAKE_INSTALL_PREFIX=/usr \
#    -DINSTALL_LIBDIR=/usr/lib \
#    -DLDAC_SOFT_FLOAT=OFF \
#    ../
#make DESTDIR=$DEST_DIR install

#------------------------------------------------------------------------
## [open]aptx - reverse-engineered apt-X
## http://github.com/Arkq/openaptx

#------------------------------------------------------------------------
