package utils

import (
	"encoding/json"
	"fmt"
	"time"
)

/**
 * @Author SteveChan
 * @Description //TODO 
 * @Date 16:50 2020/12/10
 * @Param 
 * @return 
 **/
func StringSliceEqualBCE(a, b []int) bool {
	if len(a) != len(b) {
		return false
	}

	if (a == nil) != (b == nil) {
		return false
	}

	b = b[:len(a)]
	for i, v := range a {
		if v != b[i] {
			return false
		}
	}

	return true
}

/**
 * @Author SteveChan
 * @Description //TODO 
 * @Date 16:50 2020/12/10
 * @Param 
 * @return 
 **/
func IsContain(items []interface{}, item string) bool {
	for _, eachItem := range items {
		if eachItem == item {
			return true
		}
	}
	return false
}

/**
 * @Author SteveChan
 * @Description //TODO 
 * @Date 16:50 2020/12/10
 * @Param 
 * @return 
 **/
func IsContainInt(items map[int64]interface{}, item int64) bool {
	for _, eachItem := range items {
		if eachItem == item {
			return true
		}
	}
	return false
}

type LocalDate time.Time

/**
 * @Author SteveChan
 * @Description // MarshalJSON satify the json marshal interface
 * @Date 16:49 2020/12/10
 * @Param 
 * @return 
 **/
func (l LocalDate) MarshalJSON() ([]byte, error) {
	stamp := fmt.Sprintf("\"%s\"", time.Time(l).Format("2006-01-02"))
	return []byte(stamp), nil
}

/**
 * @Author SteveChan
 * @Description //TODO 
 * @Date 16:49 2020/12/10
 * @Param 
 * @return 
 **/
func JsonToMap(jsonStr string) (map[string]string, error) {
	m := make(map[string]string)
	err := json.Unmarshal([]byte(jsonStr), &m)
	if err != nil {
		fmt.Printf("Unmarshal with error: %+v\n", err)
		return nil, err
	}

	for k, v := range m {
		fmt.Printf("%v: %v\n", k, v)
	}

	return m, nil
}

/**
 * @Author SteveChan
 * @Description 插入切片指定位置
 * @Date 16:46 2020/12/10
 * @Param index int 插入的位置
 * @Param newStr []string 待插入的切片
 * @Param str []string 源切片
 * @return ns []string  返回新的切片
 **/
func InsertSlice(index int, newstr []string, src []string) (ns []string) {
	ns = append(ns, src[:index]...) // 切片后加..., 相当于拆包成单个元素
	ns = append(ns, newstr...)
	ns = append(ns, src[index:]...)
	return
}

/**
 * @Author SteveChan
 * @Description 查找相同的手机号
 * @Date 16:45 2020/12/10
 * @Param nums []int 数组
 * @return int
 **/
func findRepeatNumber(nums []int) int {
	maps := make(map[int]bool)
	for _,num:=range nums{
		if maps[num]{
			return num
		}else{
			maps[num]=true
		}
	}
	return -1
}

/**
 * @Author SteveChan
 * @Description //
 * @Date 16:49 2020/12/10
 * @Param 
 * @return 
 **/
//RankPeriodCheckTime 设置赛季时检查时间范围的合法性
//func RankPeriodCheckTime(rankTypeId int64, beginTime int64, endTime int64, idNot int64) bool {
//	sql := `SELECT count(*) FROM rank_period
//			WHERE rank_type_id = %d
//			AND id <> %d
//			AND
//			(
//			(UNIX_TIMESTAMP(begin_time) BETWEEN %d AND %d)
//			OR
//			(UNIX_TIMESTAMP(end_time) BETWEEN %d AND %d)
//			OR
//			(%d BETWEEN UNIX_TIMESTAMP(begin_time) AND UNIX_TIMESTAMP(end_time))
//			OR
//			(%d BETWEEN UNIX_TIMESTAMP(begin_time) AND UNIX_TIMESTAMP(end_time))
//			)
//			LIMIT 1 `
//	sql = fmt.Sprintf(sql, rankTypeId, idNot, beginTime, endTime, beginTime, endTime, beginTime, endTime)
//	var cnt int
//	err := utils.ExecuteQueryOne(&cnt, sql)
//	if err != nil {
//		log.Error("SQL Execute err:%s", err)
//		return false
//	}
//	if cnt > 0 {
//		return false
//	}
//	return true
//}