#!/bin/bash

if [ "$1" == "--test" ]; then
    TMP=/tmp/get_tv7_test
else
    TMP=$(mktemp)
fi

if [ "$1" != "--test" -o ! -r "$TMP" ]; then
    /usr/bin/wget 'http://www.tv7.fi/netti-tv/' -O $TMP > /dev/null 2>&1 || exit 1
fi


function set_time() {
     TIME=$(date -d "$1" +%H.%M)

}


function set_bcstart() {
    BCSTART=$(echo "$1" | cut -d\= -f 3 | cut -d\> -f 1)
    BCSTART=${BCSTART:1:25}

}


function get_program_title() {
    echo "$1" | sed 's/href="#">/\n/g' | tail -n 1

}

function get_series_title() {
    echo "$1" | sed 's/-title">/\n/g' | tail -n 2 | head -n 1

}


function set_bcend() {
    BCEND=$(echo "$1" | cut -d\= -f 3 | cut -d\> -f 1)
    BCEND=${BCEND:1:25}

}


function get_duration() {
    d1=$(date -d "$1" +%s)
    d2=$(date -d "$2" +%s)
    echo $((d2 - d1))

}


function set_duration() {
    DURATION=$(get_duration "$1" "$2")

}


function set_episode_title() {
    EPISODE_TITLE=""
    echo "$1" | grep -q episode-title || return

    EPISODE_TITLE=$(echo "$1" | sed 's/episode-title/\n/g' | tail -n 1 | cut -d\< -f 1 | cut -d\> -f 2)
    EPISODE_TITLE=$(echo $EPISODE_TITLE)
    if [ "$EPISODE_TITLE" == "-" ]; then
        EPISODE_TITLE=""
    fi
}


function set_episode() {
    if [ -z "$EPISODE_NUMBER" ]; then
        if [ -z "$EPISODE_TITLE" ]; then
            return
        fi

        EPISODE_TITLE=$(echo $EPISODE_TITLE | sed 's/[^[:punct:]]$/&./')
        if [ -z "$DESCRIPTION" ]; then
            DESCRIPTION="$EPISODE_TITLE $DESCRIPTION"
            return
        fi

        DESCRIPTION="$EPISODE_NUMBER: $EPISODE_TITLE"
        return
    fi

    if [ -z "$EPISODE_TITLE" ]; then
        if [ -z "$DESCRIPTION" ]; then
            DESCRIPTION="Jakso $EPISODE_NUMBER."
            return
        fi

        DESCRIPTION="$EPISODE_NUMBER: $EPISODE_TITLE"
        return
    fi

    EPISODE_TITLE=$(echo $EPISODE_TITLE | sed 's/[^[:punct:]]$/&./')
    DESCRIPTION="$EPISODE_NUMBER: $EPISODE_TITLE $DESCRIPTION"
    EPISODE_TITLE=$(echo "$1" | sed 's/cast-desc/\n/g' | tail -n 1 | cut -d\< -f 1 | cut -d\> -f 2)

}


function set_description() {
    DESCRIPTION=$(echo "$1" | sed 's/cast-desc/\n/g' | tail -n 1 | cut -d\< -f 2 | cut -d\> -f 2)
    DESCRIPTION=${DESCRIPTION//\( /\(}
    DESCRIPTION=${DESCRIPTION// \)/\)}

    EPISODE_NUMBER=$(echo "${DESCRIPTION}" | sed 's/(Jakso: /\n/g' | tail -n 1)
    if [ "${#EPISODE_NUMBER}" -eq "${#DESCRIPTION}" ]; then
        EPISODE_NUMBER=""
    else
        EPISODE_NUMBER=${EPISODE_NUMBER//\)/}
        EPISODE_NUMBER=$(echo $EPISODE_NUMBER)
        DESCRIPTION=${DESCRIPTION%%(Jakso: *}
    fi

    DESCRIPTION=${DESCRIPTION//\(Jakso: /\(jakso }
    DESCRIPTION="$(echo $DESCRIPTION)"

    set_episode

    DESCRIPTION="$(echo $DESCRIPTION)"

}


function set_the_rest() {
    set_time "$BCSTART"
    set_bcend "$1"
    set_duration "$BCSTART" "$BCEND"
    set_episode_title "$1"

    echo "$1" | grep -q series-title
    if [ $? -gt 0 ]; then
        ALBUM=$(get_program_title "$line")
    else
        ALBUM=$(get_series_title "$line")
    fi

    ALBUM=$(echo "$ALBUM" | cut -d\< -f 1)
    set_description "$1"

    if [ -z "$DESCRIPTION" ]; then
        TITLE="$TIME. $ALBUM"
    else
        TITLE="$TIME. $ALBUM. $DESCRIPTION"
    fi
}


declare -a ITEM
I=0


function add_item() {
    read -r -d '' ITEM[$I] << EOM
        <track><!-- $BCSTART -->
            <location>rtsp://vod.tv7.fi:1935/tv7-fi/mp4:tv7-fi.stream_360p</location>
            <album>$ALBUM</album>
            <title>$TITLE</title>
            <date>$BCSTART</date>
            <duration>$DURATION</duration>
            <info>http://tv7.fi/</info>
        </track>
EOM
    I=$(($I + 1))
}

while read line; do
    echo "$line" | grep -q broadcast-header && continue

    echo "$line" | grep -q bcstart && set_bcstart "$line" && continue
    echo "$line" | grep -q bcend && set_the_rest "$line" && add_item && continue
done < $TMP

if [ "$1" == "--test" ]; then
    PROGRAM_GUIDE=/tmp/get_tv7_test.xspf
else
    PROGRAM_GUIDE=$TMP
fi

cat > $PROGRAM_GUIDE << EOM
<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
    <trackList>
EOM
    for i in $(seq 0 $(($I - 1))); do
        echo "${ITEM[$i]}" >> $PROGRAM_GUIDE
    done
    cat >> $PROGRAM_GUIDE << EOM
    </trackList>
</playlist>
EOM

cat $PROGRAM_GUIDE
rm $PROGRAM_GUIDE
