package service

// AdminRole 后台角色
var AdminRole = new(sAdminRole)

type sAdminRole struct{}

//func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializer.Response {
//	var (
//		q            = query.Use(config.AdminDB).AdminRole
//		m            = q.WithContext(ctx)
//		mq           = query.Use(config.AdminDB).AdminRoleMenu
//		pq           = query.Use(config.AdminDB).AdminRolePermission
//		offset int64 = 0
//		models forms.UserAccountListRes
//		lists  []*forms.AdminRoleListModel
//	)
//
//	m = m.Order(q.Sort).Order(q.ID.Desc())
//
//	req.Page, req.PerPage, offset = forms.CalculatePage(req.Page, req.PerPage)
//
//	count, err := m.Count()
//	if err != nil {
//		return serializer.Err(consts.CodeParamErr, "查询出错 count", err)
//	}
//
//	if count > 0 {
//		if err = m.Limit(int(req.PerPage)).Offset(int(offset)).Scan(&lists); err != nil {
//			return serializer.Err(consts.CodeParamErr, "查询出错 lists", err)
//		}
//	}
//
//	for _, v := range lists {
//		if err := json.Unmarshal([]byte(cast.ToString(v.Systems)), &v.Systems); err != nil {
//			return serializer.Err(consts.CodeParamErr, "格式化出错 Systems", err)
//		}
//
//		permissionsModels, err := pq.Where(pq.RoleID.Eq(int32(v.ID))).Find()
//		if err != nil {
//			return serializer.Err(consts.CodeParamErr, "查询出错 permissionsModels", err)
//		}
//		permissionsMap := make(map[int32][]int32)
//		for _, item := range permissionsModels {
//			if _, ok := permissionsMap[item.SystemID]; ok {
//				permissionsMap[item.SystemID] = append(permissionsMap[item.SystemID], item.PermissionID)
//			} else {
//				permissionsMap[item.SystemID] = []int32{item.PermissionID}
//			}
//		}
//		v.Permissions = permissionsMap
//
//		pagesModels, err := mq.Where(mq.RoleID.Eq(int32(v.ID))).Find()
//		if err != nil {
//			return serializer.Err(consts.CodeParamErr, "查询出错 pagesModels", err)
//		}
//		pagesMap := make(map[int32][]int32)
//		for _, item := range pagesModels {
//			if _, ok := pagesMap[item.SystemID]; ok {
//				pagesMap[item.SystemID] = append(pagesMap[item.SystemID], item.PageID)
//			} else {
//				pagesMap[item.SystemID] = []int32{item.PageID}
//			}
//		}
//		v.Pages = pagesMap
//	}
//
//	models.List = lists
//	models.Page = req.Page
//	models.PerPage = req.PerPage
//	models.PageCount = (count + req.PerPage - 1) / req.PerPage
//
//	return serializer.Suc(models)
//}

//func (s *sAdminRole) Edit(ctx *gin.Context, req forms.AdminRoleEditReq) serializer.Response {
//
//	q := query.Use(config.AdminDB).AdminRole
//	mq := query.Use(config.AdminDB).AdminRoleMenu
//	pq := query.Use(config.AdminDB).AdminRolePermission
//	uq := query.Use(config.AdminDB).AdminUser
//
//	logrus.Warnf("req:%+v", req)
//
//	menusModel := make([]*model.AdminRoleMenu, 0)
//	for sysId, menus := range req.Pages {
//		for _, menu := range menus {
//			menusModel = append(menusModel, &model.AdminRoleMenu{
//				SystemID: sysId,
//				RoleID:   int32(req.ID),
//				PageID:   menu,
//			})
//		}
//	}
//	permissionsModel := make([]*model.AdminRolePermission, 0)
//	for sysId, permissions := range req.Permissions {
//		for _, id := range permissions {
//			permissionsModel = append(permissionsModel, &model.AdminRolePermission{
//				SystemID:     sysId,
//				RoleID:       int32(req.ID),
//				PermissionID: id,
//			})
//		}
//	}
//
//	systems, err := json.Marshal(req.Systems)
//	if err != nil {
//		return serializer.Err(consts.CodeParamErr, "格式化出错 Systems:", err)
//	}
//	// 修改
//	if req.ID > 0 {
//		update := &model.AdminRole{
//			Name:      req.Name,
//			Key:       req.Key,
//			Sort:      req.Sort,
//			Remark:    req.Remark,
//			Status:    req.Status,
//			Systems:   string(systems),
//			UpdatedAt: time.Now(),
//		}
//		queryTx := query.Use(config.AdminDB).Begin()
//		_, err := queryTx.AdminRole.Where(q.ID.Eq(req.ID)).Updates(update)
//		if err != nil {
//			queryTx.Rollback()
//			return serializer.Err(consts.CodeDBError, "更新出错", err)
//		}
//		// 删除旧的菜单权限
//		if _, err := queryTx.AdminRoleMenu.Where(mq.RoleID.Eq(int32(req.ID))).Delete(); err != nil {
//			queryTx.Rollback()
//			return serializer.Err(consts.CodeDBError, "更新出错", err)
//		}
//		// 插入新的菜单权限
//		if err := queryTx.AdminRoleMenu.Create(menusModel...); err != nil {
//			queryTx.Rollback()
//			return serializer.Err(consts.CodeDBError, "更新出错", err)
//		}
//		// 删除旧的操作权限
//		if _, err := queryTx.AdminRolePermission.Where(pq.RoleID.Eq(int32(req.ID))).Delete(); err != nil {
//			queryTx.Rollback()
//			return serializer.Err(consts.CodeDBError, "更新出错", err)
//		}
//		// 插入新的操作权限
//		if err := queryTx.AdminRolePermission.Create(permissionsModel...); err != nil {
//			queryTx.Rollback()
//			return serializer.Err(consts.CodeDBError, "更新出错", err)
//		}
//		queryTx.Commit()
//		// 查询该角色下的用户，清空token
//		users, _ := query.Use(config.AdminDB).AdminUser.Where(uq.RoleID.Eq(int32(req.ID))).Find()
//		for _, user := range users {
//			config.TokenRedis.Del(config.GetUserTokenKey(user.ID))
//		}
//		return serializer.Suc(nil)
//	}
//
//	// 新增
//	create := &model.AdminRole{
//		Name:      req.Name,
//		Key:       req.Key,
//		Sort:      req.Sort,
//		Systems:   string(systems),
//		Remark:    req.Remark,
//		Status:    req.Status,
//		UpdatedAt: time.Now(),
//		CreatedAt: time.Now(),
//	}
//	queryTx := query.Use(config.AdminDB).Begin()
//	if err := queryTx.AdminRole.WithContext(ctx).Create(create); err != nil {
//		logrus.Error(err)
//		queryTx.Rollback()
//		return serializer.Err(consts.CodeDBError, "更新出错", err)
//	}
//	// 插入新的菜单权限
//	for _, item := range menusModel {
//		item.RoleID = int32(create.ID)
//	}
//	if err := queryTx.AdminRoleMenu.Create(menusModel...); err != nil {
//		logrus.Error(err)
//		queryTx.Rollback()
//		return serializer.Err(consts.CodeDBError, "更新出错", err)
//	}
//
//	// 插入新的操作权限
//	for _, item := range permissionsModel {
//		item.RoleID = int32(create.ID)
//	}
//	if err := queryTx.AdminRolePermission.Create(permissionsModel...); err != nil {
//		logrus.Error(err)
//		queryTx.Rollback()
//		return serializer.Err(consts.CodeDBError, "更新出错", err)
//	}
//	queryTx.Commit()
//	return serializer.Suc(nil)
//}

//func (s *sAdminRole) GetRole(ctx *gin.Context, req forms.AdminRoleReq) (*model.AdminRole, error) {
//	var (
//		q = query.Use(config.AdminDB).AdminRole
//		m = q.WithContext(ctx)
//	)
//	result, err := m.Where(q.ID.Eq(req.ID)).First()
//	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
//		return nil, err
//	}
//	return result, nil
//}

//func (s *sAdminRole) GetAllSystem() ([]*model.AdminSystem, error) {
//	var (
//		q = query.Use(config.AdminDB).AdminSystem
//	)
//	systems, err := q.Find()
//	if err != nil {
//		logrus.Error(err)
//	}
//	return systems, nil
//}
