package main

import (
	"fmt"
	"math/rand"
	"strings"
)

var maleFirstNames = []string{
	"Александр", "Алексей", "Андрей", "Антон", "Арсений",
	"Артур", "Артём", "Богдан", "Валерий", "Василий",
	"Виктор", "Владислав", "Глеб", "Григорий", "Даниил",
	"Денис", "Дмитрий", "Евгений", "Егор", "Иван",
	"Игорь", "Илья", "Кирилл", "Леонид", "Максим",
	"Марк", "Матвей", "Михаил", "Никита", "Николай",
	"Олег", "Павел", "Пётр", "Роман", "Руслан",
	"Сергей", "Станислав", "Тимофей", "Фёдор",
}

var femaleFirstNames = []string{
	"Алина", "Алёна", "Анастасия", "Ангелина", "Анна",
	"Вера", "Вероника", "Виктория", "Дарья", "Ева",
	"Екатерина", "Елена", "Елизавета", "Ирина", "Кира",
	"Кристина", "Ксения", "Любовь", "Маргарита", "Марина",
	"Мария", "Милана", "Надежда", "Наталья", "Ольга",
	"Полина", "Светлана", "София", "Татьяна", "Юлия", "Яна",
}

var lastNames = []string{
	"Алексеев", "Андреев", "Антонов", "Баранов", "Белов",
	"Белый", "Бельский", "Беляев", "Борисов", "Васильев",
	"Великий", "Волков", "Воробьёв", "Григорьев", "Давыдов",
	"Егоров", "Жуков", "Зайцев", "Захаров", "Иванов",
	"Калинин", "Ковалёв", "Козлов", "Комаров", "Крамской",
	"Кузнецов", "Кузьмин", "Лебедев", "Макаров", "Медведев",
	"Михайлов", "Морозов", "Никитин", "Николаев", "Новиков",
	"Орлов", "Островский", "Павлов", "Петров", "Покровский",
	"Попов", "Раевский", "Романов", "Семёнов", "Сергеев",
	"Смирнов", "Соколов", "Соловьёв", "Степанов", "Тарасов",
	"Титов", "Толстой", "Трубецкой", "Филиппов", "Фролов",
	"Фёдоров", "Чайковский", "Черный", "Яковлев",
}

// convertToFemaleSurname handles Russian suffix rules
func convertToFemaleSurname(surname string) string {
	if strings.HasSuffix(surname, "ий") || strings.HasSuffix(surname, "ый") || strings.HasSuffix(surname, "ой") {
		return surname[:len(surname)-4] + "ая"
	}
	if strings.HasSuffix(surname, "ов") || strings.HasSuffix(surname, "ев") ||
		strings.HasSuffix(surname, "ин") || strings.HasSuffix(surname, "ын") ||
		strings.HasSuffix(surname, "ёв") {
		return surname + "а"
	}
	return surname
}

func generateName() string {
	isFemale := rand.Intn(2) == 0
	var fn string
	if isFemale {
		fn = femaleFirstNames[rand.Intn(len(femaleFirstNames))]
	} else {
		fn = maleFirstNames[rand.Intn(len(maleFirstNames))]
	}
	// 70% chance to have a last name
	if rand.Float32() < 0.3 {
		return fn
	}
	ln := lastNames[rand.Intn(len(lastNames))]
	if isFemale {
		ln = convertToFemaleSurname(ln)
	}
	return fmt.Sprintf("%s %s", fn, ln)
}
