package main

//var db *sql.DB
//
//func getDate(time string) string {
//	date, _, _ := strings.Cut(time, " ")
//	return date
//}
//func getDB() *sql.DB {
//	if db != nil {
//		return db
//	}
//	cfg := mysql.Config{
//		User:   "root",
//		Passwd: "pingcap",
//		Net:    "tcp",
//		Addr:   "tidb.aa8270d1.15606a19.us-east-1.prod.aws.tidbcloud.com:4000",
//		DBName: "jirainterval",
//	}
//	db, err := sql.Open("mysql", cfg.FormatDSN())
//	if err != nil {
//		panic(err)
//	}
//	// See "Important settings" section.
//	db.SetConnMaxLifetime(time.Minute * 3)
//	db.SetMaxOpenConns(10)
//	db.SetMaxIdleConns(10)
//	return db
//}

//
//func GetCurrentShiftOverview(tData *TemplateData) {
//	rows, err := getDB().Query("select concat(c2.category_name, ' - ', c1.category_name), engineer_name, engineer_en_name, offset, offset2 from categories as c1 left join categories as c2 on c1.parent_category_id = c2.category_id, shift, engineers, t_week_id where c1.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and shift.week_id = fn_week_id(now()) and t_week_id.id = shift.week_id ")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category_name string
//		var engineer_name string
//		var engineer_en_name sql.NullString
//		var start_time string
//		var end_time string
//		err := rows.Scan(&category_name, &engineer_name, &engineer_en_name, &start_time, &end_time)
//		var engineer_en_name_string string
//		if engineer_en_name.Valid {
//			engineer_en_name_string = "(" + engineer_en_name.String + ")"
//		} else {
//			engineer_en_name_string = ""
//		}
//		if err != nil {
//			log.Fatal(err)
//		}
//		// add to weekend
//		tData.StartDate = getDate(start_time)
//		tData.EndDate = getDate(end_time)
//		if _, exist := tData.ShiftOverview[category_name]; exist {
//			tData.ShiftOverview[category_name] = append(tData.ShiftOverview[category_name], engineer_name+engineer_en_name_string)
//		} else {
//			tData.ShiftOverview[category_name] = make([]string, 0)
//			tData.ShiftOverview[category_name] = append(tData.ShiftOverview[category_name], engineer_name+engineer_en_name_string)
//		}
//	}
//
//}
//
//func GetListView(tData *TemplateData) {
//	weekRow, err := getDB().Query("select fn_week_id(now())")
//	if err != nil {
//		panic(err)
//	}
//	defer weekRow.Close()
//	var currWeek int
//	for weekRow.Next() {
//		err = weekRow.Scan(&currWeek)
//		if err != nil {
//			log.Fatal(err)
//		}
//	}
//	rows, err := getDB().Query("select concat(c1.category_name, ' - ', c2.category_name), engineer_name, engineer_en_name, team_name, week_id, offset, offset2 from categories as c1, categories as c2, shift, engineers,teams, t_week_id where c1.category_id = c2.parent_category_id and c2.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and engineers.team_id = teams.team_id and week_id between fn_week_id(now()) - 2 and fn_week_id(now()) + 4 and week_id = t_week_id.id order by week_id, engineer_name")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category_name string
//		var engineer_name string
//		var engineer_en_name sql.NullString
//		var team_name string
//		var week_id int
//		var start_date string
//		var end_date string
//		err := rows.Scan(&category_name, &engineer_name, &engineer_en_name, &team_name, &week_id, &start_date, &end_date)
//		if err != nil {
//			log.Fatal(err)
//		}
//		// fmt.Println(category_name, engineer_name, week_id)
//		var week string
//		week = getDate(start_date) + " - " + getDate(end_date)
//		var engineer_en_name_string string
//		if engineer_en_name.Valid {
//			engineer_en_name_string = engineer_en_name.String
//		} else {
//			engineer_en_name_string = ""
//		}
//		if _, exist := tData.ShiftList[category_name]; exist {
//			tData.ShiftList[category_name] = append(tData.ShiftList[category_name], &EWPair{engineer_name, team_name, week_id == currWeek, week, engineer_en_name_string})
//		} else {
//			tData.ShiftList[category_name] = make([]*EWPair, 0)
//			tData.ShiftList[category_name] = append(tData.ShiftList[category_name], &EWPair{engineer_name, team_name, week_id == currWeek, week, engineer_en_name_string})
//		}
//		//fmt.Println(tData.ShiftList)
//	}
//}

func GetShiftOverviewAndListInOneTxn() {

}

//func GetOverviewWithOpenId(tData *TemplateData) {
//	rows, err := getDB().Query("select concat(c2.category_name, ' - ', c1.category_name), engineer_name, open_id, offset, offset2 from categories as c1 left join categories as c2 on c1.parent_category_id = c2.category_id, shift, engineers, t_week_id where c1.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and shift.week_id = fn_week_id(now()) and t_week_id.id = shift.week_id ")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category_name string
//		var engineer_name string
//		var open_id sql.NullString
//		var start_time string
//		var end_time string
//		err := rows.Scan(&category_name, &engineer_name, &open_id, &start_time, &end_time)
//		if err != nil {
//			log.Fatal(err)
//		}
//		// add to weekend
//		tData.StartDate = getDate(start_time)
//		tData.EndDate = getDate(end_time)
//		if _, exist := tData.ShiftOverview[category_name]; !exist {
//			tData.ShiftOverview[category_name] = append(tData.ShiftOverview[category_name], open_id.String)
//		} else {
//			tData.ShiftOverview[category_name] = make([]string, 0)
//			tData.ShiftOverview[category_name] = append(tData.ShiftOverview[category_name], open_id.String)
//		}
//	}
//
//}
//
//func GetShiftChangeInfor() *ConsecutiveWeek {
//	cData := &ConsecutiveWeek{make(map[string]map[string]bool), make(map[string]map[string]bool)}
//	rows, err := getDB().Query("select concat(c2.category_name, ' - ', c1.category_name), open_id from categories as c1 left join categories as c2 on c1.parent_category_id = c2.category_id, shift, engineers where c1.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and shift.week_id = fn_week_id(now())")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category_name string
//		var open_id sql.NullString
//		err := rows.Scan(&category_name, &open_id)
//		if err != nil {
//			log.Fatal(err)
//		}
//		if _, exist := cData.CurrWeek[category_name]; !exist {
//			cData.CurrWeek[category_name] = make(map[string]bool)
//			cData.PrevWeek[category_name] = make(map[string]bool)
//		}
//		cData.CurrWeek[category_name][open_id.String] = true
//	}
//	rows, err = getDB().Query("select concat(c2.category_name, ' - ', c1.category_name), open_id from categories as c1 left join categories as c2 on c1.parent_category_id = c2.category_id, shift, engineers where c1.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and shift.week_id = fn_week_id(now())-1")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category_name string
//		var open_id sql.NullString
//		err := rows.Scan(&category_name, &open_id)
//		if err != nil {
//			log.Fatal(err)
//		}
//		if _, exist := cData.CurrWeek[category_name][open_id.String]; exist {
//			delete(cData.CurrWeek[category_name], open_id.String)
//		} else {
//			cData.PrevWeek[category_name][open_id.String] = true
//		}
//	}
//	return cData
//}
//
//func GetJiraRoleInfo() map[string]*CategoryJiraInfo {
//	jiraInfos := make(map[string]*CategoryJiraInfo)
//	rows, err := getDB().Query("select categories.parent_category_id, categories.category_id, email from categories, shift, engineers where categories.category_id = shift.category_id and shift.engineer_id = engineers.engineer_id and shift.week_id = fn_week_id(now())")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var lv1_category sql.NullString
//		var lv2_category string
//		var email string
//		err := rows.Scan(&lv1_category, &lv2_category, &email)
//		if err != nil {
//			log.Fatal((err))
//		}
//		if _, exist := jiraInfos[lv2_category]; !exist {
//			jiraInfos[lv2_category] = &CategoryJiraInfo{make([]string, 0), make([]string, 0)}
//			jiraInfos[lv2_category].Personnel = append(jiraInfos[lv2_category].Personnel, email)
//		} else {
//			jiraInfos[lv2_category].Personnel = append(jiraInfos[lv2_category].Personnel, email)
//		}
//		if !lv1_category.Valid {
//			continue
//		}
//		if _, exist := jiraInfos[lv1_category.String]; !exist {
//			jiraInfos[lv1_category.String] = &CategoryJiraInfo{make([]string, 0), make([]string, 0)}
//			jiraInfos[lv1_category.String].Personnel = append(jiraInfos[lv1_category.String].Personnel, email)
//		} else {
//			jiraInfos[lv1_category.String].Personnel = append(jiraInfos[lv1_category.String].Personnel, email)
//		}
//	}
//	rows, err = getDB().Query("select category_id, role_id, url_prefix from roles")
//	if err != nil {
//		panic(err)
//	}
//	defer rows.Close()
//	for rows.Next() {
//		var category string
//		var role_id string
//		var url_prefix string
//		err := rows.Scan(&category, &role_id, &url_prefix)
//		if err != nil {
//			log.Fatal(err)
//		}
//		if _, exist := jiraInfos[category]; exist {
//			jiraInfos[category].Roles = append(jiraInfos[category].Roles, url_prefix+"/role/"+role_id)
//		}
//	}
//	return jiraInfos
//}
