// +build prod

package main

import (
	"io/ioutil"
	"strings"

	"github.com/meskio/epubgo"
	"github.com/rainycape/cld2"
)

func GuessLang(epub *epubgo.Epub, orig_langs []string) []string {
	spine, err := epub.Spine()
	if err != nil {
		return orig_langs
	}

	var err_spine error
	err_spine = nil
	langs := []string{}
	for err_spine == nil {
		html, err := spine.Open()
		err_spine = spine.Next()
		if err != nil {
			continue
		}
		defer html.Close()

		buff, err := ioutil.ReadAll(html)
		if err != nil {
			continue
		}
		langs = append(langs, cld2.Detect(string(buff)))
	}

	lang := commonLang(langs)
	if lang != "un" && differentLang(lang, orig_langs) {
		return []string{lang}
	}
	return orig_langs
}

func commonLang(langs []string) string {
	count := map[string]int{}
	for _, l := range langs {
		count[l]++
	}

	lang := "un"
	maxcount := 0
	for l, c := range count {
		if c > maxcount && l != "un" {
			lang = l
			maxcount = c
		}
	}
	return lang
}

func differentLang(lang string, orig_langs []string) bool {
	orig_lang := "un"
	if len(orig_langs) > 0 && len(orig_langs) >= 2 {
		orig_lang = strings.ToLower(orig_langs[0][0:2])
	}

	return orig_lang != lang
}