package date_parser

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

var (
	ruMonths = map[string]time.Month{
		"января":   time.January,
		"февраля":  time.February,
		"марта":    time.March,
		"апреля":   time.April,
		"мая":      time.May,
		"июня":     time.June,
		"июля":     time.July,
		"августа":  time.August,
		"сентября": time.September,
		"октября":  time.October,
		"ноября":   time.November,
		"декабря":  time.December,
	}
)

type parser struct{}

func NewDateParser() IDateParser {
	return &parser{}
}

func (p *parser) Parse(date string) (time.Time, error) {
	parts := strings.Fields(date)
	if len(parts) < 2 {
		return time.Time{}, fmt.Errorf("Неверный формат даты, ожидалось 'День Месяц', получено: '%s'", date)
	}

	day, err := strconv.Atoi(parts[0])
	if err != nil {
		return time.Time{}, fmt.Errorf("Не удалось получить день: %v", err)
	}

	monthStr := strings.ToLower(parts[1])
	month, ok := ruMonths[monthStr]
	if !ok {
		return time.Time{}, fmt.Errorf("Неизвестный месяц: %s", monthStr)
	}

	year := time.Now().Year()

	return time.Date(year, month, day, 0, 0, 0, 0, time.Local), nil
}
