package handler

import (
	"context"
	"errors"
	"fmt"
	"strings"
	"ticket-pimp/internal/domain"

	"github.com/mr-linch/go-tg"
	"github.com/mr-linch/go-tg/tgb"
)

type git struct {
	name string
	url  string

	git string
	ssh string
}

func newGit(domain *domain.Git) *git {
	return &git{
		name: domain.Name,
		url:  domain.HtmlUrl,
		git:  domain.CloneUrl,
		ssh:  fmt.Sprintf("ssh://%s/%s.git", domain.SshUrl, domain.FullName),
	}
}

// FYI: Telegram doesn't renders this hyperlink, if the url is localhost 🤷‍♂️
func (g *git) PrepareAnswer() string {
	return tg.HTML.Text(
		tg.HTML.Line(
			"Repo ",
			tg.HTML.Link(g.name, g.url),
			"has been created!",
		),
	)
}

func (h *Handler) NewRepoHandler(ctx context.Context, mu *tgb.MessageUpdate) error {

	str := strings.Replace(mu.Text, "/repo", "", 1)

	if str == "" {
		return errors.New("empty command provided")
	}

	var g *domain.Git

	g, err := h.git.CreateRepo(str)

	if err != nil {
		return mu.Answer(errorAnswer(err.Error())).ParseMode(tg.HTML).DoVoid(ctx)
	}

	resp := newGit(g).PrepareAnswer()
	h.LogMessage(ctx, mu, resp)

	return mu.Answer(resp).ParseMode(tg.HTML).DoVoid(ctx)
}
