package jira

import (
	"fmt"
	"net/http"
	"net/url"
	"testing"
	"time"

	jira "github.com/andygrunwald/go-jira"
)

type AssignRequest struct {
	AccountID string `json:"accountId"`
}

func TestAssign(t *testing.T) {
	tp := jira.BasicAuthTransport{
		Username: "charles.m@pingcap.com",
		Password: "ATATT3xFfGF0_fBZ-KNGNe9jUQXHrg0Z1pJgdfNYrUx3eMs009QaayMZ2OWfaeU6u1Tdoh09ahFzm8Eqj--Kg5SIqvAEjlG3v-c7f2Cnrin6vrBYsj18bZLQ0oGwztad9emgS-CwdYrCd-n7QbGy87l5XjbJEGYkMAllLJb8dcfvnKWmQo5QLyk=5DC0DA9E",
	}
	client, err := jira.NewClient(&http.Client{
		Timeout:   15 * time.Second,
		Transport: &tp,
	}, "https://tidb.atlassian.net/")
	if err != nil {
		fmt.Println("error", err)
	}
	resp, err := client.Issue.UpdateAssignee("O11YDEV-1146273", &jira.User{AccountID: "712020:afb525be-ca15-4311-964d-bb7c690f8888"})
	if err != nil {
		fmt.Println("assign error", err)
	}
	err = handleJiraResponse(resp)
	if err != nil {
		fmt.Println("assign error", err)
	}
}

func TestGetUser(t *testing.T) {
	tp := jira.BasicAuthTransport{
		Username: "charles.m@pingcap.com",
		Password: "ATATT3xFfGF0_fBZ-KNGNe9jUQXHrg0Z1pJgdfNYrUx3eMs009QaayMZ2OWfaeU6u1Tdoh09ahFzm8Eqj--Kg5SIqvAEjlG3v-c7f2Cnrin6vrBYsj18bZLQ0oGwztad9emgS-CwdYrCd-n7QbGy87l5XjbJEGYkMAllLJb8dcfvnKWmQo5QLyk=5DC0DA9E",
	}
	client, err := jira.NewClient(&http.Client{
		Timeout:   15 * time.Second,
		Transport: &tp,
	}, "https://tidb.atlassian.net/")
	if err != nil {
		fmt.Println("error", err)
	}
	relURL, err := url.Parse("/rest/api/2/user/search")
	if err != nil {
		fmt.Println("err", err)
	}
	param := url.Values{}
	param.Add("query", "sihao.yu@pingcap.com")
	relURL.RawQuery = param.Encode()
	fmt.Println("query string", "query is", relURL.String())
	req, err := client.NewRequest("GET", relURL.String(), nil)
	if err != nil {
		fmt.Println("err", err)
	}
	users := make([]jira.User, 0)
	user := &jira.User{}
	resp, err := client.Do(req, &users)
	if err != nil {
		fmt.Println(err)
	}
	err = handleJiraResponse(resp)
	for _, u := range users {
		fmt.Println("info", "account id", u.AccountID)
		fmt.Println("info", "account type", u.AccountType)
		if u.AccountType == "atlassian" {
			cp := u
			user = &cp
		}
	}
	if err != nil {
		fmt.Println("error", err)
	}
	fmt.Println("user", user)
}

func TestBackfillClusterID(t *testing.T) {
	tp := jira.BasicAuthTransport{
		Username: "charles.m@pingcap.com",
		Password: "ATATT3xFfGF0U1CAJSJjWEsA1qm9sFkUqIaGdEYssSJqE1XPAZv-KWA4QkQcR4SY9h1S0KSibO3lWoXZmKxaTwWYfn2FsvtPI-vCUTayE1MfNCSzPammtnw2TomRapw8kRWSosZVIK7jUKs5f6zb5UUn_ZBswgT38AxUbzmYckJ9ZOFykQpgxxk=780625DD",
	}
	client, err := jira.NewClient(&http.Client{
		Timeout:   15 * time.Second,
		Transport: &tp,
	}, "https://tidb.atlassian.net/")
	if err != nil {
		fmt.Println("error", err)
	}
	jiraClient := &Client{
		client:     client,
		httpClient: &http.Client{Timeout: 30 * time.Second},
	}
	// if err := jiraClient.BackfillClusterIDForTicket("TCID-12093", "10947714666900611238"); err != nil {
	// 	fmt.Println("backfill error", err)
	// }
	issue, _, err := jiraClient.client.Issue.Get("TCID-12093", nil)
	if err != nil {
		fmt.Println("backfill error", err)
	}
	fmt.Println("issue", issue.Key, issue.Fields.Unknowns)
	// err = handleJiraResponse(resp)
	// if err != nil {
	// 	fmt.Println("assign error", err)
	// }
}
