package main

import (
	"log"

	"github.com/gin-gonic/gin"

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

func RegisterRoute(engine *gin.Engine, app *App) {
	APIGroup := engine.Group("/api")
	APIGroup.POST("/users", func(c *gin.Context) {
		body := struct {
			Users []struct {
				Email string
				Phone string
				Name  string
			} `users`
		}{}

		err := c.ShouldBindJSON(&body)
		if err != nil {
			c.JSON(400, nil)
			return
		}
		c.JSON(200, nil)

		acToken := crm.GetAccessToken()
		go func() {
			crmUsers := []CRM_User{}
			for _, user := range body.Users {
				if _, ok := app.Users[user.Email]; ok {
					continue
				}

				crmUserId := crm.GetOpenUserID(user.Phone, acToken)
				if crmUserId == "" {
					continue
				}

				larkOpenId := app.Lark.GetOpenIdByEmail(user.Email)
				if larkOpenId == "" {
					continue
				}
				crmUsers = append(crmUsers, CRM_User{Email: user.Email,
					LarkOpenId: larkOpenId, CRMUserId: crmUserId,
					Name:  user.Name,
					Todos: make(map[string]*CRM_Todo),
				})
			}
			log.Println("Add New Watching User By Post Request", crmUsers)

			app.Lock.Lock()
			for idx, _ := range crmUsers {
				crmUser := crmUsers[idx]
				crmUser.AppInst = app
				app.Users[crmUser.Email] = &crmUser

				job.AddJob("@every 5m", app.Users[crmUser.Email])
			}
			app.Lock.Unlock()

			Save(app.DB, crmUsers)
		}()
	})
}
