package mysqlBz

import (
	orm "duoduo/database"
	"duoduo/tools"
	"math/rand"
	"time"
)

type BiZhi struct {
	ID         int    `gorm:"column:id;type:bigint(20);primary_key" json:"id"`     // 壁纸id
	Url        string `gorm:"column:url;type:varchar(255)" json:"url"`             // 壁纸链接
	Label      string `gorm:"column:label;type:varchar(255)" json:"label"`         // 标签
	CreateTime string `gorm:"column:create_time;type:datetime" json:"create_time"` // 插入时间
	UpdateTime string `gorm:"column:update_time;type:datetime" json:"update_time"` // 更新时间
}

type BiZhiCollection struct {
	ID         int    `gorm:"column:id;type:bigint(20);primary_key" json:"id"`     // 壁纸id
	Url        string `gorm:"column:url;type:varchar(255)" json:"url"`             // 壁纸链接
	Label      string `gorm:"column:label;type:varchar(255)" json:"label"`         // 标签
	CreateTime string `gorm:"column:create_time;type:datetime" json:"create_time"` // 插入时间
	UpdateTime string `gorm:"column:update_time;type:datetime" json:"update_time"` // 更新时间
	BiZhiId    int    `gorm:"column:bizhi_id;type:bigint(20)" json:"biZhiId"`
	UrlSize    string `json:"urlSize"` //缩略图
}

func (m *BiZhi) TableName() string {
	return "bizhi"
}

//list 接口使用
func (o *BiZhi) GetRoundBiZhi() ([]BiZhi, error) {
	var doc []BiZhi
	var idList []int
	var count int
	var status int

	err := orm.BzMysql.Table("bizhi").Count(&count).Error
	if err != nil {
		return nil, err
	}

	rand.Seed(time.Now().UnixNano())

	for {
		status = 0
		//fmt.Println(idList)
		if len(idList) > 8 {
			break
		}
		num := rand.Intn(count-1+1) + 1 //[n-m]
		for ii := 0; ii < len(idList); ii++ {
			if idList[ii] == num {
				status = 1
				break
			}
		}
		if status == 0 {
			idList = append(idList, num)
		}

	}

	table := orm.BzMysql.Table("bizhi ")

	table = table.Where("id in (?) ", idList)

	if err = table.Select("*").Order("id desc").Limit(8).Find(&doc).Error; err != nil {
		return nil, err
	}

	return doc, nil
}

func (o *BiZhi) GetBiZhiLabel(label string) (BiZhi, error) {
	var doc BiZhi
	table := orm.BzMysql.Table("bizhi ")
	if label == "" {
		table = table.Where("label = '' or label is null")
	} else {
		table = table.Where(" label like '%?%'", label)
	}

	if err := table.Select("*").Order("id desc").Limit(1).Find(&doc).Error; err != nil {
		return doc, err
	}
	return doc, nil
}

func (o *BiZhi) BiZhiLabelUpdate(label string) error {
	if err := orm.BzMysql.Table(o.TableName()).Model(&o).Where("id = ? ", o.ID).Updates(
		map[string]interface{}{
			"label":       label,
			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
		return err
	}
	return nil
}

func (o *BiZhi) BiZhiGroup(label string, openid string) ([]BiZhiCollection, error) {
	var doc []BiZhiCollection
	var data []BiZhiCollection
	var bizhi BiZhiCollection

	err := orm.BzMysql.Table("bizhi b").Where("b.id = ?", o.ID).Select("b.*,(SELECT bizhi_id FROM collection WHERE bizhi_id = b.id and open_id = ?) as bizhi_id", openid).Order("id desc").Find(&bizhi).Error
	if err != nil {
		return doc, err
	}
	table := orm.BzMysql.Table("bizhi b ").Where("label = ?", label)

	if err := table.Select("b.*,(SELECT bizhi_id FROM collection WHERE bizhi_id = b.id and open_id = ?) as bizhi_id", openid).Order("id desc").Limit(10).Find(&doc).Error; err != nil {
		return doc, err
	}

	//for i := 0; i < len(doc); i++ {
	//	if doc[i].ID == o.ID {
	//		bizhi.Url = doc[i].Url
	//		bizhi.ID = doc[i].ID
	//		bizhi.Label = doc[i].Label
	//		bizhi.BiZhiId = doc[i].BiZhiId
	//		bizhi.UrlSize = bizhi.Url + "?imageView2/2"
	//
	//	}
	//}
	bizhi.UrlSize = bizhi.Url + "?imageView2/2"
	data = append(data, bizhi)
	for i := 0; i < len(doc); i++ {
		if doc[i].ID == o.ID {
			continue
		} else {
			doc[i].UrlSize = doc[i].Url + "?imageView2/2"
			data = append(data, doc[i])
		}

	}

	return data, nil
}

func (o *BiZhi) BiZhiDes() (BiZhi, error) {
	var doc BiZhi

	err := orm.BzMysql.Table("bizhi").Where("id = ?", o.ID).First(&doc).Error
	if err != nil {
		return doc, err
	}
	return doc, nil
}

//list 接口使用
func (o *BiZhi) GetLabelList(pageSize int, pageIndex int) ([]BiZhi, int, error) {
	var doc []BiZhi

	table := orm.BzMysql.Table("bizhi").Where("label like ?", "%"+o.Label+"%")
	var count int
	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
		return nil, 0, err
	}
	table.Count(&count)
	return doc, count, nil
}