package model

import (
	"time"

	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
	operationPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/operation"
)

type SystemRole struct {
	Id        int64                 `json:"id,omitempty"`
	Name      string                `json:"name,omitempty"`
	Remarks   string                `json:"remarks,omitempty"`
	IsShow    pasturePb.IsShow_Kind `json:"is_show,omitempty"`
	IsDelete  pasturePb.IsShow_Kind `json:"is_delete,omitempty"`
	CreatedAt int64                 `json:"created_at,omitempty"`
	UpdatedAt int64                 `json:"updated_at,omitempty"`
}

func (s *SystemRole) TableName() string {
	return "system_role"
}

const (
	LayoutTime = "2006-01-02 15:04:05"
	LayoutDate = "20060102"
)

func NewSystemRole(req *operationPb.AddRoleRequest) *SystemRole {
	systemRole := &SystemRole{
		Name:    req.Name,
		Remarks: req.Remarks,
		IsShow:  pasturePb.IsShow_Ok,
	}
	return systemRole
}

type SystemRoleSlice []*SystemRole

func (s SystemRoleSlice) ToPB(systemMenuList map[int64][]*SystemMenu) []*pasturePb.SearchRoleRequest {
	res := make([]*pasturePb.SearchRoleRequest, len(s))
	for i, v := range s {
		res[i] = &pasturePb.SearchRoleRequest{
			Id:              int32(v.Id),
			Name:            v.Name,
			Remarks:         v.Remarks,
			IsShow:          v.IsShow,
			CreatedAtFormat: time.Unix(v.CreatedAt, 0).Format(LayoutTime),
			UpdatedAtFormat: time.Unix(v.UpdatedAt, 0).Format(LayoutTime),
		}
	}
	return res
}