package common

import (
	"encoding/json"
	"fmt"
	"io"
	"strings"
)

type Repository struct {
	Id        uint
	Name      string
	Full_Name string
	Fork      bool
	Parent    *Repository
	Owner     *Organization
	Clone_Url string

	Ssh_Url            string
	Default_Branch     string
	Object_Format_Name string
}

type Organization struct {
	Id       uint
	Username string
}

type User struct {
	Id       uint
	Username string
}

type RepositoryAction struct {
	Action string

	Sender       User
	Organization Organization
	Repository   Repository

	PrjGit string
}

// TODO: sanity check values!!!!
func (h *RequestHandler) parseRepositoryRequest(dataReader io.Reader) *RepositoryAction {
	if h.HasError() {
		return nil
	}

	var data RepositoryAction
	h.Error = json.NewDecoder(dataReader).Decode(&data)

	if h.HasError() {
		return nil
	}

	repoIdx := strings.LastIndex(data.Repository.Ssh_Url, "/")
	if repoIdx == -1 || data.Repository.Ssh_Url[repoIdx+1:] != data.Repository.Name+".git" {
		h.Error = fmt.Errorf("No data, skipping")
		h.ErrLogger.Printf("Unexpected URL for SSH repository: %s\n", data.Repository.Name)
		return nil
	}

	data.PrjGit = data.Repository.Ssh_Url[:repoIdx+1] + DefaultGitPrj + ".git"

	h.StdLogger.Printf("Request '%s' for repo: %s\n", data.Action, data.Repository.Full_Name)
	if len(data.Action) < 1 {
		h.Error = fmt.Errorf("No data, skipping")
		h.ErrLogger.Println("Request has no data.... skipping")
	}

	h.Data = data
	return &data
}
