package vipcard

import (
	"spaceofcheng/services/models"
	"spaceofcheng/services/models/model"
	"spaceofcheng/services/utils"
	"strconv"
	"strings"
	"time"

	"github.com/go-xorm/xorm"
)

// ChannelDAO 当前数据库操作对象
type VipcardDAO struct {
	ctx *utils.Context
	db  *xorm.Session
}

// NewVipcardDAO New Inst
func NewVipcardDAO(ctx *utils.Context) *VipcardDAO {
	return &VipcardDAO{
		ctx: ctx,
		db:  ctx.DB,
	}
}

type VipChild struct {
	model.TaVipCardChild `xorm:"extendes"`
	CaesName             string
	CustomerName         string
}

// GetVipCardList获取VIP卡列表
func (m *VipcardDAO) GetVipCardList(caseid string) ([]VipChild, error) {
	var vipcards []VipChild
	sql := `SELECT
	vcc.*,
	sc.case_name,
	tc.customer_name
FROM
	ta_vip_card_child vcc
	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
	INNER JOIN sys_case sc ON vc.case_id = sc.case_id 
	INNER JOIN ta_customer tc on vcc.customer_id = tc.customer_id
WHERE
	vcc.status > 0 ` + strconv.Itoa(models.STATUS_DEL) +
		`AND sc.case_id IN(` + strings.Replace(caseid, ",", "','", -1) + `) `
	err := m.db.Sql(sql).Find(&vipcards)
	return vipcards, err
}

// AddVipCard 新增VIP卡
func (m *VipcardDAO) AddVipCard(vipCard model.TaVipCard) (*model.TaVipCard, error) {
	vipCard.VipCardId = utils.GetGUID()
	vipCard.CreateDate = time.Now()
	vipCard.Status = models.STATUS_NORMAL
	_, err := m.db.Insert(vipCard)
	return &vipCard, err

}

// AddVipChildCard 新增VIP子卡
func (m *VipcardDAO) AddVipChildCard(vipChild model.TaVipCardChild) (*model.TaVipCardChild, error) {
	vipChild.CreateDate = time.Now()
	vipChild.VipCardChildId = utils.GetGUID()
	vipChild.Status = models.STATUS_NORMAL
	_, err := m.db.Insert(vipChild)
	return &vipChild, err
}

// GetVipChildByCode 通过code获取VIP子卡
func (m *VipcardDAO) GetVipChildByCode(vipCode string) (*model.TaVipCardChild, error) {
	var vipChild []model.TaVipCardChild
	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("vip_card_child_code =?", vipCode).Find(&vipChild)
	if err != nil {
		return nil, err
	}
	if len(vipChild) > 0 {
		return &vipChild[0], nil
	}
	return nil, nil
}

// UpdateVipChild 更新子卡
func (m *VipcardDAO) UpdateVipChild(vipChild model.TaVipCardChild) error {
	var cols = []string{
		"customer_id",
		"customer_tel",
		"active_date",
	}
	_, err := m.db.Cols(cols...).Where("vip_card_child_id", vipChild.VipCardChildId).Update(vipChild)
	return err
}
