package api

import (
	"enterprise/common/model"
	"github.com/smbrave/goutil"
	"github.com/spf13/cast"
)

type Salary struct {
	Id             string `json:"id,omitempty"`
	Month          string `json:"month,omitempty"`
	Username       string `json:"username,omitempty"`
	Realname       string `json:"realname,omitempty"`
	BaseSalary     string `json:"base_salary,omitempty"`
	TargetSalary   string `json:"target_salary,omitempty"`
	RealSalary     string `json:"real_salary,omitempty"`
	AttendIncome   string `json:"attend_income,omitempty"`
	TargetIncome   string `json:"target_income,omitempty"`
	AwardIncome    string `json:"award_income,omitempty"`
	OtherIncome    string `json:"other_income,omitempty"`
	ShouldDay      string `json:"should_day,omitempty"`
	AttendDay      string `json:"attend_day,omitempty"`
	HolidayDay     string `json:"holiday_day,omitempty"`
	SocialDeduct   string `json:"social_deduct,omitempty"`
	HouseDeduct    string `json:"house_deduct,omitempty"`
	PersonalDeduct string `json:"personal_deduct,omitempty"`
	OtherDeduct    string `json:"other_deduct,omitempty"`
	CreateTime     string `json:"create_time,omitempty"`
	UpdateTime     string `json:"update_time,omitempty"`
	Extra          string `json:"extra,omitempty"`
}

type CreateSalaryReq struct {
	Month    string `json:"month"`
	Username string `json:"username"`
}

type UpdateSalaryReq struct {
	Id             string `json:"id"`
	OtherIncome    string `json:"other_income"`
	OtherDeduct    string `json:"other_deduct"`
	PersonalDeduct string `json:"personal_deduct"`
}

type ListSalaryReq struct {
	BaseRequest
	StartMonth string `form:"start_month"`
	EndMonth   string `form:"end_month"`
	Username   string `form:"username"`
}

func (s *Salary) From(m *model.StaffSalary) {
	s.Id = cast.ToString(m.Id)
	s.Username = m.Username
	s.Month = m.Month
	s.RealSalary = goutil.FormatFloat(m.GetRealSalary())
	s.AttendIncome = goutil.FormatFloat(m.AttendSalary)
	s.TargetIncome = goutil.FormatFloat(m.TargetSalary)
	s.AwardIncome = goutil.FormatFloat(m.AwardSalary)
	s.OtherIncome = goutil.FormatFloat(m.OtherSalary)
	s.ShouldDay = cast.ToString(m.ShouldDay)
	s.AttendDay = goutil.FormatFloat(m.AttendDay)
	s.HolidayDay = goutil.FormatFloat(m.HolidayDay)
	s.SocialDeduct = goutil.FormatFloat(m.SocialDeduct)
	s.HouseDeduct = goutil.FormatFloat(m.HouseDeduct)
	s.PersonalDeduct = goutil.FormatFloat(m.PersonalDeduct)
	s.OtherDeduct = goutil.FormatFloat(m.OtherDeduct)
	s.CreateTime = goutil.TimeToDateTime(m.CreateTime)
	s.UpdateTime = goutil.TimeToDateTime(m.UpdateTime)
	s.Extra = m.Extra
}

func (s *Salary) Add(o *Salary) {
	s.TargetSalary = goutil.FormatFloat(cast.ToFloat64(s.TargetSalary) + cast.ToFloat64(o.TargetSalary))
	s.BaseSalary = goutil.FormatFloat(cast.ToFloat64(s.BaseSalary) + cast.ToFloat64(o.BaseSalary))
	s.RealSalary = goutil.FormatFloat(cast.ToFloat64(s.RealSalary) + cast.ToFloat64(o.RealSalary))
	s.AttendIncome = goutil.FormatFloat(cast.ToFloat64(s.AttendIncome) + cast.ToFloat64(o.AttendIncome))
	s.TargetIncome = goutil.FormatFloat(cast.ToFloat64(s.TargetIncome) + cast.ToFloat64(o.TargetIncome))
	s.AwardIncome = goutil.FormatFloat(cast.ToFloat64(s.AwardIncome) + cast.ToFloat64(o.AwardIncome))
	s.OtherIncome = goutil.FormatFloat(cast.ToFloat64(s.OtherIncome) + cast.ToFloat64(o.OtherIncome))
	s.ShouldDay = cast.ToString(cast.ToInt(s.ShouldDay) + cast.ToInt(o.ShouldDay))
	s.AttendDay = goutil.FormatFloat(cast.ToFloat64(s.AttendDay) + cast.ToFloat64(o.AttendDay))
	s.HolidayDay = goutil.FormatFloat(cast.ToFloat64(s.HolidayDay) + cast.ToFloat64(o.HolidayDay))
	s.SocialDeduct = goutil.FormatFloat(cast.ToFloat64(s.SocialDeduct) + cast.ToFloat64(o.SocialDeduct))
	s.HouseDeduct = goutil.FormatFloat(cast.ToFloat64(s.HouseDeduct) + cast.ToFloat64(o.HouseDeduct))
	s.PersonalDeduct = goutil.FormatFloat(cast.ToFloat64(s.PersonalDeduct) + cast.ToFloat64(o.PersonalDeduct))
	s.OtherDeduct = goutil.FormatFloat(cast.ToFloat64(s.OtherDeduct) + cast.ToFloat64(o.OtherDeduct))

}