package src

import "fmt"

// PreviewSize struct
type PreviewSize struct {
	size string
}

// PredefinedSizeS - set preview size
func (s *PreviewSize) PredefinedSizeS() *PreviewSize {
	return &PreviewSize{
		size: "S",
	}
}

// PredefinedSizeM - set preview size
func (s *PreviewSize) PredefinedSizeM() *PreviewSize {
	return &PreviewSize{
		size: "M",
	}
}

// PredefinedSizeL - set preview size
func (s *PreviewSize) PredefinedSizeL() *PreviewSize {
	return &PreviewSize{
		size: "L",
	}
}

// PredefinedSizeXL - set preview size
func (s *PreviewSize) PredefinedSizeXL() *PreviewSize {
	return &PreviewSize{
		size: "XL",
	}
}

// PredefinedSizeXXL - set preview size
func (s *PreviewSize) PredefinedSizeXXL() *PreviewSize {
	return &PreviewSize{
		size: "XXL",
	}
}

// PredefinedSizeXXXL - set preview size
func (s *PreviewSize) PredefinedSizeXXXL() *PreviewSize {
	return &PreviewSize{
		size: "XXXL",
	}
}

// ExactWidth - set preview size
func (s *PreviewSize) ExactWidth(width uint32) *PreviewSize {
	return &PreviewSize{
		size: fmt.Sprintf("%dx", width),
	}
}

// ExactHeight - set preview size
func (s *PreviewSize) ExactHeight(height uint32) *PreviewSize {
	return &PreviewSize{
		size: fmt.Sprintf("x%d", height),
	}
}

// ExactSize - set preview size
func (s *PreviewSize) ExactSize(width uint32, height uint32) *PreviewSize {
	return &PreviewSize{
		size: fmt.Sprintf("%dx%d", width, height),
	}
}

func (s *PreviewSize) String() string {
	return s.size
}