package inline

import (
	"github.com/gotd/td/tg"
)

// PhotoResultBuilder is photo result option builder.
type PhotoResultBuilder struct {
	result *tg.InputBotInlineResultPhoto
	msg    MessageOption
}

func (b *PhotoResultBuilder) apply(r *resultPageBuilder) error {
	m, err := b.msg.apply()
	if err != nil {
		return err
	}

	t := tg.InputBotInlineResultPhoto{
		ID:    b.result.ID,
		Type:  b.result.Type,
		Photo: b.result.Photo,
	}
	if t.ID == "" {
		t.ID, err = r.generateID()
		if err != nil {
			return err
		}
	}

	t.SendMessage = m
	r.results = append(r.results, &t)
	return nil
}

// ID sets ID of result.
// Should not be empty, so if id is not provided, random will be used.
func (b *PhotoResultBuilder) ID(id string) *PhotoResultBuilder {
	b.result.ID = id
	return b
}

// Photo creates game result option builder.
func Photo(photo tg.InputPhotoClass, msg MessageOption) *PhotoResultBuilder {
	return &PhotoResultBuilder{
		result: &tg.InputBotInlineResultPhoto{
			Type:  PhotoType,
			Photo: photo,
		},
		msg: msg,
	}
}
