#!/bin/bash


#### INIT
CP=$( which cp ) || { echo "can't find 'cp' !"; exit 254; }
MKTEMP=$( which mktemp ) || { echo "can't find 'mktemp'"; exit 254; }
MD5SUM=$( which md5sum ) || { echo "can't find 'md5sum'"; exit 254; }
DIFF=$( which diff ) || { echo "can't find 'diff'"; exit 254; }
[ -z "$EDITOR" ] && { echo "please have your EDITOR variable set"; exit 254; }

#### TEST ARG
if [ ! -e "$1" ]; then
    echo "This file does not exists"
    echo "Usage: $0 <file to edit>"
    exit 255
fi


#### GOGOGO

TMPFILE=$( mktemp /tmp/vidiff.XXXXXXXX ) || { 
echo "error creating tmp file";    exit 1; }

$CP "$1" "$TMPFILE" || {
echo "error filling tmp file $TMPFILE with original"; exit 2; }

OMD5=$( md5sum "$1" | sed -e 's/\ .*$//' ) || {
echo "error making some md5 with $1"; exit 3; }
CMD5=$( md5sum "$TMPFILE" | sed -e 's/\ .*$//' ) || {
echo "error making md5 with $TMPFILE"; exit 4; }
if [ "$OMD5" != "$CMD5" ]; then
    echo "file copied is different from original!"
    echo "$TMPFILE"
    exit 5 
fi

$EDITOR "$TMPFILE"
if [ $? -gt 0 ]; then
    echo "editor exited abnormally, no modification done"
    echo "$TMPFILE exists."
    exit 6
fi

diff -u "$1" "$TMPFILE"
echo -ne "-----------\nIS IT OKAY? (non/OUI) "
read CONFIRMATION
if [ "$CONFIRMATION" == "OUI" ]; then
    echo "--> Replacing file!"
    cp -v "$TMPFILE" "$1"
else
    echo "-- ok, exit, no modification done"
fi

rm -v "$TMPFILE"

