#!/bin/bash

#############################################################
# fixing tvscraper.db differences between scraped data and
# downloaded data
#
# written by Joern Mangels  joern.mangels@arcor.de 23.01.2014
# Version 0.0.1
#############################################################
# linux tools 
SQ=`which sqlite3`
RM=`which rm`
RMDIR=`which rmdir`
CP=`which cp`
SHM="/dev/shm"
#############################################################
# Check for directory $1

if [ -z "$1" ];
then
 echo "Bitte den Pfad zur tvscraper.db angeben - Beispiel: /var/lib/tvscraper"
 exit 1
else
 if [ -d $1 ];
  then
   DB=$1/tvscraper.db
   if [ -f $DB ];
   then
    echo "tvscraper.db gefunden in $1"
   else
    echo "tvscraper.db konnte nicht gefunden werden in $1"
    exit 1
   fi
  else 
   echo "Das angegebene Verzeichnis existiert nicht!"
   exit 1
  fi
fi


PICPFAD_MOVIES="$1/movies"
PICPFAD_SERIES="$1/series"

if [ -d $PICPFAD_MOVIES ];
then
  echo "Verzeichnis gefunden: "$PICPFAD_MOVIES
else
  echo "Verzeichnis wurde nicht gefunden: "$PICPFAD_MOVIES
  exit 1
fi
if [ -d $PICPFAD_SERIES ];
then
  echo "Verzeichnis gefunden: "$PICPFAD_SERIES
else
  echo "Verzeichnis wurde nicht gefunden: "$PICPFAD_SERIES
  exit 1
fi

#############################################################
# These are the tables in tvscraper.db
#actor_movie    event_movie    movies         scrap_checker  series
#actors         event_series   recordings     scrap_history  series_actors
#############################################################
# Functions

function fix_movies {
 ID=`$SQ $DB "select movie_id from movies where movie_id = $1"` 
 if [ $ID != "" ];
 then
  echo "Fix table movie for ID: $ID"
  $SQ $DB "Delete from movies where movie_id = $1"
  $SQ $DB "Delete from actor_movie where movie_id = $1"
  $SQ $DB "Delete from event_movie where movie_id = $1"
 fi
}

function fix_series {
 ID=`$SQ $DB "select series_id from series where series_id = $1"` 
 if [ $ID != "" ];
 then
  echo "Fix table series for ID: $ID"
  $SQ $DB "Delete from series where series_id = $1"
  $SQ $DB "Delete from series_actors where actor_series_id = $1"
  $SQ $DB "Delete from event_series where series_id = $1"
 fi
}

function free_space {
 $SQ $DB "VACUUM"
}

function start_fix_movies {
 IDS_ALL=`$SQ $DB "select movie_id from movies"` 
 NUM=0 
 OK=0
 NOK=0

 for id in $IDS_ALL;
 do
  NUM=$(( $NUM + 1 ))

  echo "------------------------------------"
  echo "Starte Verarbeitung für Filme Nr. $NUM"

  echo "Prüfe Movie-ID: "$id
  NAME_PIC=$PICPFAD_MOVIES"/"$id"_poster.jpg"
  echo "Suche nach $NAME_PIC"
 
  if [ -f $NAME_PIC ];
  then
   OK=$(( $OK + 1 ))
   echo "DATEN OK: $NAME_PIC ist vorhanden !"
  else
   NOK=$(( $NOK + 1 ))
   echo "DATEN FIX: $NAME_PIC ist nicht vorhanden !"
   fix_movies $id
  fi

 done
 echo "------------------------------------"
 echo "Ergebnis Verarbeitung Filme:"
 echo "Anzahl Sätze OK: $OK"
 echo "Anzahl Sätze fehlerhaft und gefixt: $NOK"
}

function start_fix_series {
 IDS_ALL=`$SQ $DB "select series_id from series"` 
 NUM=0 
 OK=0
 NOK=0

 for id in $IDS_ALL;
 do
  NUM=$(( $NUM + 1 ))

  echo "------------------------------------"
  echo "Starte Verarbeitung für Serien Nr. $NUM"

  echo "Prüfe Serien-ID: "$id
  NAME_DIR=$PICPFAD_SERIES"/$id"
  NAME_PIC=$NAME_DIR/banner.jpg
  echo "Suche nach $NAME_DIR"


  if [ -d $NAME_DIR ] && [ -f $NAME_PIC ];
  then
   OK=$(( $OK + 1 ))
   echo "DATEN OK: $NAME_PIC ist vorhanden !"
  else
   NOK=$(( $NOK + 1 ))
   echo "DATEN FIX: $NAME_PIC ist nicht vorhanden !"

   fix_series $id
   if [ -d $NAME_DIR ];
   then
    $RM -f $NAME_DIR/*
    $RMDIR $NAME_DIR
   fi

  fi

 done
 echo "------------------------------------"
 echo "Ergebnis Verarbeitung Serien:"
 echo "Anzahl Sätze OK: $OK"
 echo "Anzahl Sätze fehlerhaft und gefixt: $NOK"
}

function create_copy {

 BAK="$1/tvscraper.db.bak"
 
 if [ -f $BAK ];
 then
  $RM $BAK
 fi

 $CP $DB $BAK 

}

function put_shm {
 FILE="$SHM/tvscraper.db"
 
 if [ -f $FILE ];
 then
  $RM $FILE
  $CP $DB $SHM
 fi

}

function delete_hist {
 $SQ $DB "Delete from scrap_history"
}

#############################################################
# Main Part

# Sicherheitskopie anfertigen
 create_copy $1

# Fixing Movies
 start_fix_movies 

# Fixing Series
 start_fix_series

# delete scrap_history
  delete_hist

# After all free diskspace
 free_space 

# put new db to /dev/shm if exist
 put_shm
 