package model

import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"

type MedicalEquipment struct {
	Id            int64               `json:"id"`
	PastureId     int64               `json:"pastureId"`
	Name          string              `json:"name"`
	Producer      string              `json:"producer"`
	BatchNumber   string              `json:"batch_number"`
	Unit          pasturePb.Unit_Kind `json:"unit"`
	Specs         string              `json:"specs"`
	Inventory     int32               `json:"inventory"`
	Price         int32               `json:"price"`
	Remarks       string              `json:"remarks"`
	OperationId   int32               `json:"operation_id"`
	OperationName string              `json:"operation_name"`
	CreatedAt     int64               `json:"created_at"`
	UpdatedAt     int64               `json:"updated_at"`
}

func (m *MedicalEquipment) TableName() string {
	return "medical_equipment"
}

func NewMedicalEquipment(req *pasturePb.SearchMedicalEquipmentList, currentUser *SystemUser) *MedicalEquipment {
	return &MedicalEquipment{
		PastureId:     currentUser.PastureId,
		Name:          req.Name,
		Producer:      req.Producer,
		BatchNumber:   req.BatchNumber,
		Unit:          req.Unit,
		Specs:         req.Specs,
		Inventory:     req.Inventory,
		Price:         int32(req.Price * 100),
		Remarks:       req.Remarks,
		OperationId:   int32(currentUser.Id),
		OperationName: currentUser.Name,
	}
}

type MedicalEquipmentSlice []*MedicalEquipment

func (m MedicalEquipmentSlice) ToPB(unitMap map[pasturePb.Unit_Kind]string) []*pasturePb.SearchMedicalEquipmentList {
	res := make([]*pasturePb.SearchMedicalEquipmentList, len(m))
	for i, v := range m {
		res[i] = &pasturePb.SearchMedicalEquipmentList{
			Id:            int32(v.Id),
			Name:          v.Name,
			Producer:      v.Producer,
			BatchNumber:   v.BatchNumber,
			Unit:          v.Unit,
			UnitName:      unitMap[v.Unit],
			Specs:         v.Specs,
			Inventory:     v.Inventory,
			Price:         float32(v.Price) / 100,
			Remarks:       v.Remarks,
			OperationId:   v.OperationId,
			OperationName: v.OperationName,
			CreatedAt:     int32(v.CreatedAt),
			UpdatedAt:     int32(v.UpdatedAt),
		}
	}
	return res
}