package vipcard

import (
	"spaceofcheng/services/models"
	"spaceofcheng/services/models/customer"
	"spaceofcheng/services/models/model"
	"spaceofcheng/services/models/vipcard"
	"spaceofcheng/services/service"
	"spaceofcheng/services/utils"

	"github.com/astaxie/beego"
)

// CaseServ 系统处理
type VipcardServ struct {
	ctx  *utils.Context
	dao  *vipcard.VipcardDAO
	cdao *customer.CustomerDAO
}

// NewVipcardServ 初始化
func NewVipcardServ(ctx *utils.Context) *VipcardServ {
	return &VipcardServ{
		ctx:  ctx,
		dao:  vipcard.NewVipcardDAO(ctx),
		cdao: customer.NewCustomerDAO(ctx),
	}
}

// GetVipChild 获取VIP卡列表
func (s *VipcardServ) GetVipChild(caseid string, page, pageSize int) (map[string]interface{}, error) {
	if pageSize == 0 {
		pageSize = service.PAGENUM
	}
	if page == 0 {
		page = 1
	}
	vipchild, err := s.dao.GetVipCardList(caseid, page, pageSize)
	if err != nil {
		beego.Error(err)
		return nil, err
	}
	total, err := s.dao.GetCardCount(caseid)
	if err != nil {
		beego.Error(err)
		return nil, err
	}
	return map[string]interface{}{
		"list":     vipchild,
		"pagesize": pageSize,
		"pagenum":  total,
		"page":     page,
	}, err
}

// 根据code获取vip子卡
func (s *VipcardServ) GetVipChildByCode(vipChildId string) (*model.TaVipCardChild, error) {
	vipCardChild, err := s.dao.GetVipChildByCode(vipChildId)
	return vipCardChild, err
}

// UpdateVipChild 更新子卡
func (s *VipcardServ) UpdateVipChild(vipChild *model.TaVipCardChild) error {
	var err error
	err = s.dao.UpdateVipChild(vipChild)
	return err
}

// AddVipCard 新建VIP卡
func (s *VipcardServ) AddVipCard(vipCard model.TaVipCard) (*model.TaVipCard, error) {
	vipcard, err := s.dao.AddVipCard(vipCard)
	if err != nil {
		return nil, err
	}
	for a := 0; a < vipcard.TotalCount; a++ {
		var vipChild model.TaVipCardChild
		vipChild.VipCardId = vipcard.VipCardId
		vipChild.VipCardChildCode = s.dao.GenerateChildCode()
		_, err := s.dao.AddVipChildCard(vipChild)
		if err != nil {
			return nil, err
		}

	}
	return nil, nil
}

func (s *VipcardServ) FindCustomerByTel(tel string) (*model.TaCustomer, error) {
	customer, err := s.cdao.GetCustomerByPhone(tel)
	if err != nil {
		return nil, err
	}
	return customer, err
}

// CustomerCharge 给用户充值
func (s *VipcardServ) CustomerCharge(vipchild *model.TaVipCardChild, createUser model.SysUser) error {
	customer, err := s.cdao.GetCustomerByPhone(vipchild.CustomerTel)
	if err != nil {
		return err
	}
	customerId := customer.CustomerId
	account, err := s.cdao.GetAccountByCust(customerId)
	if err != nil {
		return err
	}
	vipcard, err := s.dao.GetVipCardById(vipchild.VipCardId)
	if err != nil {
		return err
	}
	var record model.TaAccountChange
	record.CustomerId = customerId
	record.Amount = vipcard.CardAmount
	record.CaseId = vipcard.CaseId
	record.CustomerName = customer.CustomerName
	record.ChangeType = models.CONSUME_MONEYCHG
	record.ChangeSource = models.ACCSOURCE_RECHARGE
	record.SourceId = vipchild.VipCardChildId
	record.SourceName = vipcard.VipCardName
	record.CreateUser = createUser.UserId
	record.FloatType = models.ACCOUNT_INCOME
	record.AccountId = account.AccountId
	return s.cdao.InsertAccountRecords(&record)

}
