package main

import (
	"encoding/json"
	"flag"
	"log"
	"testing"
	"time"

	"github.com/pingcap/crm-bot/crm"
	"github.com/pingcap/crm-bot/pkg/config"
	"github.com/pingcap/crm-bot/pkg/job"
	"github.com/pingcap/crm-bot/pkg/util"
)

func TestRemind(t *testing.T) {
	confFile := flag.String("c", "config.yml", "set config file")
	flag.Parse()
	config.InitConfig(*confFile, "yml", "../etc")
	app, err := NewApp()
	if err != nil {
		t.Fatal(err)
	}
	AutoMigrate(app.DB)
	//loadLarkSheet(app)
	job.Start()

	user := CRM_User{Email: "xiaojing.yin@pingcap.com"}
	_ = Find(app.DB, &user)
	user.AppInst = app
	todos := []CRM_Todo{}
	_ = app.DB.Find(&todos, "owner=? and dealed = 0 order by notification_time desc", "xiaojing.yin@pingcap.com").Error

	for i, _ := range todos {
		todo := &todos[i]
		todo.user = &user
		json.Unmarshal(util.StringToByteSlice(todo.NotificationContent), &todo.Tags)
		todo.DealRemainder()
	}

}

func TestCardSend(t *testing.T) {
	confFile := flag.String("c", "config.yml", "set config file")
	flag.Parse()
	config.InitConfig(*confFile, "yml", "../etc")
	app, err := NewApp()
	if err != nil {
		t.Fatal(err)
	}
	AutoMigrate(app.DB)

	user := CRM_User{Email: "xiaojing.yin@pingcap.com"}
	err = Find(app.DB, &user)
	if err != nil {
		t.Fatal(err)
	}

	acToken := crm.GetAccessToken()
	if acToken == "" {
		t.Fatal("get acToken failed")
	}
	requestData := crm.CrmRequest{}
	requestData.CorpID = "FSCID_BBBDA0FD0A83028CD08938922C5D16DA"
	requestData.CorpAccessToken = acToken
	requestData.CurrentOpenUserID = user.CRMUserId
	requestData.Data.App = "ALL"
	requestData.Data.PageSize = 500

	resp, err := crm.QueryTodoList(&requestData, crm.Todo_URL)
	if err != nil {
		t.Fatal(err)
	}

	todolist := []CRM_Todo{}
forbreak:
	for _, todoview := range resp.Data.TodoViewList {
		switch todoview.ObjectAPIName {
		case CRM_OBJ_CONTRACT:
			requestData := crm.CrmRequest{}
			requestData.CorpID = "FSCID_BBBDA0FD0A83028CD08938922C5D16DA"
			requestData.CorpAccessToken = acToken
			requestData.CurrentOpenUserID = user.CRMUserId
			requestData.Data.DataObjectAPIName = todoview.ObjectAPIName
			requestData.Data.ObjectDataId = todoview.ObjectID

			resp, err := crm.GetCrmData(&requestData)
			if err != nil {
				t.Log(err)
			}
			log.Println(todoview.ObjectAPIName, resp)
			log.Printf("%+v\n", todoview)
		case "LeadsObj":
		default:
			log.Println(todoview.Title, todoview.ObjectAPIName)
			//case "SalesOrderObj":
			break
			todo := CRM_Todo{Id: todoview.TodoID, Owner: user.Email,
				Title: todoview.Title}
			for _, elem := range todoview.TodoData.Elements {
				if elem.Key == "负责人" {
					todo.Applicant = elem.Value
				} else if elem.Key == "任务名称" {
					todo.Title = elem.Value
					// 开票申请编号 | 报价单编码 | 授权申请编号
				} else if elem.Key == "程序使用通知函编号" {
					todo.Code = elem.Value
				}
			}
			todo.NotificationTime = time.Now()
			todolist = append(todolist, todo)

			break forbreak
			err := app.sendCard(&todo, &user, nil)
			if err != nil {
				t.Fatal(err)
			}

		}
	}

	Save(app.DB, todolist)
}

func TestUserRun(t *testing.T) {
	confFile := flag.String("c", "config.yml", "set config file")
	flag.Parse()
	config.InitConfig(*confFile, "yml", "../etc")
	app, err := NewApp()
	if err != nil {
		t.Fatal(err)
	}
	AutoMigrate(app.DB)

	user := CRM_User{Email: "xiaojing.yin@pingcap.com"}
	user.Todos = make(map[string]*CRM_Todo)
	err = Find(app.DB, &user)
	if err != nil {
		t.Fatal(err)
	}

	user.AppInst = app
	user.Run()
}
