package app

import (
	"regexp"
	"strings"
)

var issueKeyPattern = regexp.MustCompile(`^[A-Z][A-Z0-9]+-\d+$`)

func ParseCommand(text string) (JobMode, string, bool) {
	text = strings.TrimSpace(text)
	if text == "" {
		return "", "", false
	}
	fields := strings.Fields(text)
	if len(fields) > 0 && fields[0] == "/pr" {
		rest := strings.TrimPrefix(text, fields[0])
		request := strings.TrimSpace(rest)
		if request == "" {
			return "", "", false
		}
		return JobModePR, request, true
	}
	if len(fields) > 0 && fields[0] == "/ticket" {
		request := strings.TrimSpace(strings.TrimPrefix(text, fields[0]))
		if _, _, ok := parseSingleTicketRequest(request); !ok {
			return "", "", false
		}
		return JobModeTicket, request, true
	}
	return JobModeAnalyze, text, true
}

func parseSingleTicketRequest(request string) (issueKey, nomination string, ok bool) {
	fields := strings.Fields(request)
	if len(fields) == 0 {
		return "", "", false
	}
	issueKey = strings.ToUpper(fields[0])
	if !issueKeyPattern.MatchString(issueKey) {
		return "", "", false
	}
	for _, field := range fields[1:] {
		if issueKeyPattern.MatchString(strings.ToUpper(strings.Trim(field, "`[](){}.,;:"))) {
			return "", "", false
		}
	}
	nomination = strings.TrimSpace(strings.TrimPrefix(request, fields[0]))
	return issueKey, nomination, true
}
