// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2

package shop

import (
	"context"
	"errors"

	"juwan-backend/app/shop/api/internal/svc"
	"juwan-backend/app/shop/api/internal/types"
	"juwan-backend/app/shop/rpc/pb"
	"juwan-backend/common/utils/contextj"

	"github.com/zeromicro/go-zero/core/logx"
)

type DeleteAnnouncementLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

// 删除店铺公告
func NewDeleteAnnouncementLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteAnnouncementLogic {
	return &DeleteAnnouncementLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *DeleteAnnouncementLogic) DeleteAnnouncement(req *types.DeleteAnnouncementReq) (resp *types.EmptyResp, err error) {
	userID, err := contextj.UserIDFrom(l.ctx)
	if err != nil {
		return nil, err
	}

	shop, err := l.svcCtx.ShopRpc.GetShopsById(l.ctx, &pb.GetShopsByIdReq{Id: req.Id})
	if err != nil {
		return nil, err
	}
	if shop.Shops == nil {
		return nil, errors.New("shop not found")
	}
	if shop.Shops.OwnerId != userID {
		return nil, contextj.ERRILLEGALUSER
	}

	index := int(req.Index)
	if index < 0 || index >= len(shop.Shops.Announcements) {
		return nil, errors.New("announcement index out of range")
	}

	shop.Shops.Announcements = append(shop.Shops.Announcements[:index], shop.Shops.Announcements[index+1:]...)
	_, err = l.svcCtx.ShopRpc.UpdateShops(l.ctx, &pb.UpdateShopsReq{
		Id:                     shop.Shops.Id,
		OwnerId:                shop.Shops.OwnerId,
		Name:                   shop.Shops.Name,
		Banner:                 shop.Shops.Banner,
		Description:            shop.Shops.Description,
		Rating:                 shop.Shops.Rating,
		TotalOrders:            shop.Shops.TotalOrders,
		PlayerCount:            shop.Shops.PlayerCount,
		CommissionType:         shop.Shops.CommissionType,
		CommissionValue:        shop.Shops.CommissionValue,
		AllowMultiShop:         shop.Shops.AllowMultiShop,
		AllowIndependentOrders: shop.Shops.AllowIndependentOrders,
		DispatchMode:           shop.Shops.DispatchMode,
		Announcements:          shop.Shops.Announcements,
		TemplateConfig:         shop.Shops.TemplateConfig,
	})
	if err != nil {
		return nil, err
	}

	return &types.EmptyResp{}, nil
}
