package main

import (
	"bytes"
	"flag"
	"fmt"
	"io"
	"net/mail"
	"os"

	"github.com/golang/glog"

	"xinu.tv/email"
)

func main() {
	flag.Parse()
	defer glog.Flush()

	hdrBuf := new(bytes.Buffer)
	msg, err := mail.ReadMessage(io.TeeReader(os.Stdin, hdrBuf))
	if err != nil {
		glog.Fatal(err)
	}

	h, err := email.HashMessage(msg)
	if err != nil {
		glog.Fatal(err)
	}
	// Find end of header in original byte stream.
	n := bytes.Index(hdrBuf.Bytes(), []byte("\n\n"))
	if n == -1 {
		glog.Error("Couldn't find end of headers in hdrBuf")
		// Copy the original message untouched.
		io.Copy(os.Stdout, hdrBuf)
		io.Copy(os.Stdout, os.Stdin)
		return
	}

	// Copy the headers out untouched.
	io.CopyN(os.Stdout, hdrBuf, int64(n))
	// Insert our new header.
	fmt.Printf("\nX-Xinu-Hash: %s\n\n", h)
	// Copy the message body out untouched.
	io.Copy(os.Stdout, msg.Body)
}
