package shop

import (
	"context"
	"encoding/json"
	"strconv"

	"juwan-backend/app/shop/api/internal/types"
	"juwan-backend/app/shop/rpc/pb"
	"juwan-backend/app/shop/rpc/shopservice"
)

func toShopProfile(in *pb.Shops) *types.ShopProfile {
	if in == nil {
		return nil
	}

	var template any
	if in.TemplateConfig != "" {
		_ = json.Unmarshal([]byte(in.TemplateConfig), &template)
	}
	if template == nil {
		template = map[string]any{}
	}

	ownerID := strconv.FormatInt(in.OwnerId, 10)
	return &types.ShopProfile{
		Id: strconv.FormatInt(in.Id, 10),
		Owner: types.UserProfile{
			Id:                 ownerID,
			Username:           "",
			Nickname:           "",
			Avatar:             "",
			Role:               "owner",
			VerifiedRoles:      []string{"owner"},
			VerificationStatus: map[string]string{},
			CreatedAt:          "",
		},
		Name:                   in.Name,
		Banner:                 in.Banner,
		Description:            in.Description,
		Rating:                 in.Rating,
		TotalOrders:            in.TotalOrders,
		PlayerCount:            in.PlayerCount,
		CommissionType:         in.CommissionType,
		CommissionValue:        in.CommissionValue,
		AllowMultiShop:         in.AllowMultiShop,
		AllowIndependentOrders: in.AllowIndependentOrders,
		DispatchMode:           in.DispatchMode,
		Announcements:          in.Announcements,
		TemplateConfig:         template,
	}
}

func getShopByOwnerID(ctx context.Context, rpc shopservice.ShopService, ownerID int64) (*pb.Shops, error) {
	list, err := rpc.SearchShops(ctx, &pb.SearchShopsReq{
		Offset:  0,
		Limit:   1,
		OwnerId: ownerID,
	})
	if err != nil {
		return nil, err
	}
	if len(list.Shops) == 0 {
		return nil, nil
	}
	return list.Shops[0], nil
}
