#!/bin/sh

SOA_ZONE="@"
SOA_NS=""
SOA_MX=""
SOA_SERIAL=1
SOA_REFRESH="1H"
SOA_RETRY="1H"
SOA_EXPIRE="1W"
SOA_NCTTL="1H"

soa_config() {
	read -p "SOA ZONE [${SOA_ZONE}]: " ZONE
	if [ -n "${ZONE}" ]; then
		if [ "${ZONE}" = "@" ]; then
			SOA_ZONE="${ZONE}"
		elif [ "${ZONE%.}" = "${ZONE}" ]; then
			SOA_ZONE="${ZONE}."
		else
			SOA_ZONE="${ZONE}"
		fi

		export SOA_ZONE
	fi

	read -p "SOA Nameserver [${SOA_NS}]: " NS
	if [ -n "${NS}" ]; then
		if [ "${NS%.}" = "${NS}" ]; then
			SOA_NS="${NS}."
		else
			SOA_NS="${NS}"
		fi
		export SOA_NS
	fi
	while [ -z "${SOA_NS}" ]; do
		read -p "SOA Nameserver: " NS
		if [ -n "${NS}" ]; then
			if [ "${NS%.}" = "${NS}" ]; then
				SOA_NS="${NS}."
			else
				SOA_NS="${NS}"
			fi
			export SOA_NS
		fi
	done

	read -p "SOA Mailserver [${SOA_MX}]: " MX
	if [ -n "${MX}" ]; then
		if [ "${MX%.}" = "${MX}" ]; then
			SOA_MX="${MX}."
		else
			SOA_MX="${MX}"
		fi
		export SOA_MX
	fi
	while [ -z "${SOA_MX}" ]; do
		if [ -n "${MX}" ]; then
			if [ "${MX%.}" = "${MX}" ]; then
				SOA_MX="${MX}."
			else
				SOA_MX="${MX}"
			fi
			export SOA_MX
		fi
	done

	read -p "SOA Serial [${SOA_SERIAL}]: " SERIAL
	if [ -n "${SERIAL}" ]; then
		SOA_SERIAL="${SERIAL}"
		export SOA_SERIAL
	fi

	read -p "SOA Refresh [${SOA_REFRESH}]: " REFRESH
	if [ -n "${REFRESH}" ]; then
		SOA_REFRESH="${SOA_REFRESH}"
		export SOA_REFRESH
	fi

	read -p "SOA RETRY [${SOA_RETRY}]: " RETRY
	if [ -n "${RETRY}" ]; then
		SOA_RETRY="${RETRY}"
		export SOA_RETRY
	fi

	read -p "SOA Expire [${SOA_EXPIRE}]: " EXPIRE
	if [ -n "${EXPIRE}" ]; then
		SOA_EXPIRE="${EXPIRE}"
		export SOA_EXPIRE
	fi

	read -p "SOA Negative Cache TTL [${SOA_NCTTL}]: " NCTTL
	if [ -n "${NCTTL}" ]; then
		SOA_NCTTL="${NCTTL}"
		export SOA_NCTTL
	fi
}

if [ $# -lt 1 ]; then
	echo "USAGE: mkzone filename [...]"
fi

while [ $# -gt 0 ]; do
	data_ok="NO"
	while [ "$data_ok" != "YES" ]; do
		soa_config
		clear
		echo "DATA FOR ZONEFILE $1"
		echo ""
		echo "ZONE:       ${SOA_ZONE}" 
		echo "Nameserver: ${SOA_NS}"
		echo "Mailserver: ${SOA_MX}"
		echo "Serial:     ${SOA_SERIAL}"
		echo "Refresh:    ${SOA_REFRESH}"
		echo "Retry:      ${SOA_RETRY}"
		echo "Expire:     ${SOA_EXPIRE}"
		echo "NC TTL:     ${SOA_NCTTL}"
		echo ""
		read -p "Is this correct [Y/N]: " OK
		if [ "${OK}" = "y" -o "${OK}" = "yes" -o "${OK}" = "Y" -o "${OK}" = "YES" -o "${OK}" = "Yes" ]; then
			data_ok="YES"
			echo OK
		fi
	done
	if [ "$1" = "-" ]; then
		cat << EOF
${SOA_ZONE} IN SOA ${SOA_NAMESERVER} ${SOA_MX} (
	${SOA_SERIAL} ;	SERIAL
	${SOA_REFRESH} ;	REFRESH
	${SOA_RETRY} ;	RETRY
	${SOA_EXPIRE} ;	EXPIRE
	${SOA_NCTTL} ) ;	Negative Cache TTL

EOF
	else
		cat > $1 << EOF
${SOA_ZONE} IN SOA ${SOA_NAMESERVER} ${SOA_MX} (
	${SOA_SERIAL} ;	SERIAL
	${SOA_REFRESH} ;	REFRESH
	${SOA_RETRY} ;	RETRY
	${SOA_EXPIRE} ;	EXPIRE
	${SOA_NCTTL} ) ;	Negative Cache TTL

EOF
	fi
	shift
done

