package translit

import (
	"strings"
)

type ArmenianTranslit struct {
	initComplete bool
}

var armenianMap = []string{
	"աու", "au",
	"բու", "bu",
	"գու", "gu",
	"դու", "du",
	"եու", "eu",
	"զու", "zu",
	"էու", "eu",
	"ըու", "yu",
	"թու", "tu",
	"ժու", "ju",
	"իու", "iu",
	"լու", "lu",
	"խու", "xu",
	"ծու", "cu",
	"կու", "ku",
	"հու", "hu",
	"ձու", "dzu",
	"ղու", "xu",
	"ճու", "cu",
	"մու", "mu",
	"յու", "yu",
	"նու", "nu",
	"շու", "shu",
	"չու", "chu",
	"պու", "pu",
	"ջու", "ju",
	"ռու", "ru",
	"սու", "su",
	"վու", "vu",
	"տու", "tu",
	"րու", "ru",
	"ցու", "cu",
	"փու", "pu",
	"քու", "qu",
	"օու", "ou",
	"ևու", "eu",
	"ֆու", "fu",
	"ոու", "vou",
	"ու", "u",
	"բո", "bo",
	"գո", "go",
	"դո", "do",
	"զո", "zo",
	"թո", "to",
	"ժո", "jo",
	"լո", "lo",
	"խո", "xo",
	"ծո", "co",
	"կո", "ko",
	"հո", "ho",
	"ձո", "dzo",
	"ղո", "xo",
	"ճո", "co",
	"մո", "mo",
	"յո", "yo",
	"նո", "no",
	"շո", "so",
	"չո", "co",
	"պո", "po",
	"ջո", "jo",
	"ռո", "ro",
	"սո", "so",
	"վո", "vo",
	"տո", "to",
	"րո", "ro",
	"ցո", "co",
	"փո", "po",
	"քո", "qo",
	"ևո", "eo",
	"ֆո", "fo",
	"ո", "vo",
	"եւ", "ev",
	"եվ", "ev",
	"ա", "a",
	"բ", "b",
	"գ", "g",
	"դ", "d",
	"ե", "e",
	"զ", "z",
	"է", "e",
	"ը", "y",
	"թ", "t",
	"ժ", "j",
	"ի", "i",
	"լ", "l",
	"խ", "x",
	"ծ", "c",
	"կ", "k",
	"հ", "h",
	"ձ", "dz",
	"ղ", "x",
	"ճ", "c",
	"մ", "m",
	"յ", "y",
	"ն", "n",
	"շ", "sh",
	"չ", "ch",
	"պ", "p",
	"ջ", "j",
	"ռ", "r",
	"ս", "s",
	"վ", "v",
	"տ", "t",
	"ր", "r",
	"ց", "c",
	"փ", "p",
	"ք", "q",
	"օ", "o",
	"և", "ev",
	"ֆ", "f",
	"ւ", "",
}

func (at *ArmenianTranslit) Init() {
	if !at.initComplete {
		// Copy map as original will be changed
		lower := armenianMap
		// For every value in copied map
		for i, val := range lower {
			// If index is odd, skip
			if i%2 == 1 {
				continue
			}
			// Capitalize first letter
			capital := strings.Title(val)
			// If capital is not the same as lowercase
			if capital != val {
				// Add capital to map
				armenianMap = append(armenianMap, capital, strings.Title(armenianMap[i+1]))
			}
		}
		// Set init complete to true so it is not run again
		at.initComplete = true
	}
}

func (at *ArmenianTranslit) Transliterate(s string) string {
	return strings.NewReplacer(armenianMap...).Replace(s)
}