#!/usr/bin/bash

# ncid-skel
# usage: ncid --no-gui --module ncid-skel

# Last edited: Jan 7, 2021

# Copyright (c) 2001-2021 by
#   John L. Chmielewski <jlc@users.sourceforge.net>
#   Todd Andrews <tandrews@users.sourceforge.net>

# Skeleton Output Module
# Modify as needed for new module
# keep "ncid-" in the name

# Module should provide a default for all variables.
# User changeable variables are in /etc/ncid/conf.d/ncid-skel.conf

ConfigDir=/etc/ncid/conf.d
ConfigFile=$ConfigDir/ncid-skel.conf

### defaults if not using config file ###
###  see $ConfigFile for description  ###
allowed_types="ALLTYPES"
skel_raw=0

[ -f $ConfigFile ] && . $ConfigFile

# backward compatibility for pre-NCID 1.8 config files
  [ -n "$skel_types" ] && allowed_types=$skel_types

# === Start of common module script routines - ncid-modules-common.sh

# Last edited: Jun 30, 2022

# Before this code is executed:
#    - set $allowed_types as desired
#
# After this code is executed:
#    - stdin will have been read into $DATE, $TIME, $NMBR, $NAME, etc.
#    - $found=1 if $TYPE is in $allowed_types; otherwise $found will be null
#    - $type_cat(egory) will be "CALLTYPE", "MSGTYPE", or "UNKNOWNTYPE"
#    - $type_smart_phone is "Y" for both smart phone calls and messages,
#      otherwise $type_smart_phone will be null
#    - $type_desc(ription) will be set to human readable verbiage

# $allowed_types can be:
#    - any mix of zero or more individual call/line types separated by spaces
#    - any mix of zero or more type categories separated by spaces
#    - the special category "ALLTYPES"
#    - null, which defaults to "ALLTYPES"
#
# If $allowed_types includes spaces, you must surround the list with quotes.
#
# Note that "ALLTYPES" causes **any** $TYPE to be accepted.
#
# Examples:
#    allowed_types="CALLTYPE"
#    allowed_types="CALLTYPE MSGTYPE"
#    allowed_types="CID MSGTYPE HUP"

# input is always 12 lines
INPUT="DATE TIME NMBR NAME LINE TYPE MESG MTYPE FNMBR CTRY LOCA CARI"
for i in $INPUT; do read $i; done

# if input is from a call:
# input: DATE\nTIME\nNMBR\nNAME\nLINE\nTYPE\n""\n""\nFNMBR\nCTRY\nLOCA\nCARI\n
#
# if input is from a message
# input: DATE\nTIME\nNMBR\nNAME\nLINE\nTYPE\nMESG\nMTYPE\nFNMBR\nCTRY\nLOCA\nCARI\n

# determine $TYPE category and description
  type_cat="UNKNOWNTYPE"
  type_desc="Unknown Call Type ($TYPE)"
  type_smart_phone=

case "$TYPE" in

  BLK) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Blacklisted Call Blocked";;
  CID) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Incoming Call";;
  HUP) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Blacklisted Call Hangup";;
  MWI) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Voicemail Message Waiting";;
  OUT) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Outgoing Call";;
  PID) type_cat=CALLTYPE;  type_smart_phone=Y; type_desc="Caller ID from a smart phone";;
  PUT) type_cat=CALLTYPE;  type_smart_phone=Y; type_desc="Outgoing Smart Phone Call";;
  RID) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Ringback Call";;
  WID) type_cat=CALLTYPE;  type_smart_phone= ; type_desc="Call Waiting Caller ID";;

  MSG)  type_cat=MSGTYPE;  type_smart_phone= ; type_desc="Message";;
  NOT)  type_cat=MSGTYPE;  type_smart_phone=Y; type_desc="Notice of a smart phone message";;

esac

# Is this $TYPE one that can be processed by this module?
found=
if [ -z "$allowed_types" ]
then
    allowed_types="ALLTYPES"
    found=1
else
    for i in $allowed_types
    do
        if   [ $i = "ALLTYPES" ];  then found=1; break;
        elif [ $i = "$type_cat" ]; then found=1; break;
        elif [ $i = "$TYPE" ];     then found=1; break;
        fi
    done
fi

# === End of common module script routines - ncid-modules-common.sh

# This is a special test mode, remove if using ncid-skel as a template
if [ $skel_raw -eq 1 ]
    then

        if [ "$found" ]; then RESULT=; else RESULT="not "; fi
        if [ "$type_smart_phone" = "Y" ]; then smart=YES; else smart=NO; fi

        echo                >/dev/tty
        echo "1  TYPE=$TYPE   (${RESULT}in allowed types list: $allowed_types)" >/dev/tty
        echo "2  DATE=$DATE"   >/dev/tty
        echo "3  TIME=$TIME"   >/dev/tty
        echo "4  LINE=$LINE"   >/dev/tty
        echo "5  NMBR=$NMBR"   >/dev/tty
        echo "6  NAME=$NAME"   >/dev/tty
        echo "7  MTYPE=$MTYPE" >/dev/tty
        echo "8  MESG=$MESG"   >/dev/tty
        echo "9  FNMBR=$FNMBR" >/dev/tty
        echo "10 NTYPE=$NTYPE" >/dev/tty
        echo "11 CTRY=$CTRY"   >/dev/tty
        echo "12 LOCA=$LOCA"   >/dev/tty
        echo "13 CARI=$CARI"   >/dev/tty
        echo "-------------"   >/dev/tty
        echo                   >/dev/tty
        echo "Category: $type_cat" >/dev/tty
        echo "Smart phone type: $smart" >/dev/tty
        echo                >/dev/tty

fi
# End of special test mode

# Exit if $TYPE not found
[ -z "$found" ] && exit 0

# calls and messages are handled differently
if [ "$type_cat" = "MSGTYPE" ]
then
    # Display Message or Notice on /dev/tty
    echo "$TYPE|$DATE|$TIME|$LINE|$FNMBR|$NAME|$MTYPE" > /dev/tty
    echo "$MESG" > /dev/tty
else
    # Display Caller ID information on /dev/tty
    echo "$TYPE|$DATE|$TIME|$LINE|$FNMBR|$NAME|" > /dev/tty
fi

exit 0
