/**
Example Action feed for Google Order Redirect.
**/

package main

import (
	pb "feed/app/generated/google/madden/ingestion"
	"fmt"

	"google.golang.org/protobuf/encoding/protojson"
)

func main() {
	feedJSON := createFeed()
	fmt.Println(feedJSON)
}

func createFeed() string {
	// Create ActionDetail
	// Example using one link for both delivery and takeout
	merchantNameCombined := "merchant-1"
	linkIDCombined := "merchant-1-takeout-delivery-action"
	urlCombined := "http://provider.com/merchant-1"
	actionCombined := &pb.ActionDetail{
		EntityId: &merchantNameCombined,
		LinkId:   &linkIDCombined,
		Url:      &urlCombined,
		Actions: []*pb.Action{{
			ActionInfo: &pb.Action_FoodOrderingInfo{
				FoodOrderingInfo: &pb.FoodOrderingInfo{
					ServiceType: pb.FoodOrderingInfo_DELIVERY,
				},
			}}, {
			ActionInfo: &pb.Action_FoodOrderingInfo{
				FoodOrderingInfo: &pb.FoodOrderingInfo{
					ServiceType: pb.FoodOrderingInfo_TAKEOUT,
				},
			}},
		},
	}

	// Example using a separate link for delivery
	merchantNameDelivery := "merchant-2"
	linkIDDelivery := "merchant-2-delivery-action"
	urlDelivery := "http://provider.com/merchant-2/delivery"
	actionDelivery := &pb.ActionDetail{
		EntityId: &merchantNameDelivery,
		LinkId:   &linkIDDelivery,
		Url:      &urlDelivery,
		Actions: []*pb.Action{{
			ActionInfo: &pb.Action_FoodOrderingInfo{
				FoodOrderingInfo: &pb.FoodOrderingInfo{
					ServiceType: pb.FoodOrderingInfo_DELIVERY,
				},
			}},
		},
	}

	// Create ActionFeed
	feed := &pb.ActionFeed{
		Data: []*pb.ActionDetail{
			actionCombined,
			actionDelivery,
		},
	}

	// Serialize to JSON string
	marshalOptions := protojson.MarshalOptions{
		UseProtoNames: true,
	}
	jsonBytes, _ := marshalOptions.Marshal(feed)
	return string(jsonBytes)
}

// [END create_feed]
