package nodeshape

import (
	
	
)

type shapeStoredData struct {
	shapeSquare
}

func ( shapeStoredData) ( LabelTier) map[label.Position]struct{} {
	switch  {
	case Good:
		return map[label.Position]struct{}{
			label.OutsideTopCenter:    {},
			label.InsideTopCenter:     {},
			label.InsideMiddleCenter:  {},
			label.InsideBottomCenter:  {},
			label.OutsideBottomCenter: {},
		}
	case OK:
		return map[label.Position]struct{}{
			label.OutsideTopRight:    {},
			label.OutsideBottomRight: {},
			label.InsideTopRight:     {},
			label.InsideBottomRight:  {},
			label.InsideMiddleRight:  {},
			label.InsideTopLeft:      {},
			label.InsideBottomLeft:   {},
		}
	case Unideal:
		return map[label.Position]struct{}{
			label.InsideMiddleLeft:  {},
			label.OutsideLeftMiddle: {},
			label.OutsideTopLeft:    {},
			label.OutsideBottomLeft: {},
		}
	case Bad:
		return map[label.Position]struct{}{
			label.OutsideRightMiddle: {},
			label.OutsideLeftTop:     {},
			label.OutsideRightTop:    {},
			label.OutsideLeftBottom:  {},
			label.OutsideRightBottom: {},
		}
	}
	return map[label.Position]struct{}{}
}

func ( shapeStoredData) () [][]*geo.RelativePoint {
	 := .GetBox()
	 := .Width
	 := .Height
	 := 15.0
	if  <  {
		 =  / 2
	}
	 := 0.27

	 := geo.NewBezierCurve([]*geo.Point{
		geo.NewPoint(, 0.0),
		geo.NewPoint(-(*), 0.0),
		geo.NewPoint(0.0, *),
		geo.NewPoint(0.0, /2.0),
	}).At(0.5)

	 := geo.NewBezierCurve([]*geo.Point{
		geo.NewPoint(, ),
		geo.NewPoint(-(*), ),
		geo.NewPoint(0.0, -*),
		geo.NewPoint(0.0, /2.0),
	}).At(0.5)

	 := geo.NewBezierCurve([]*geo.Point{
		geo.NewPoint(, 0),
		geo.NewPoint(-(*), 0),
		geo.NewPoint(-, *),
		geo.NewPoint(-, /2.0),
	}).At(0.5)

	 := geo.NewBezierCurve([]*geo.Point{
		geo.NewPoint(-, /2.0),
		geo.NewPoint(-, -*),
		geo.NewPoint(-*, ),
		geo.NewPoint(, ),
	}).At(0.5)

	 := ( - ) / 
	 := 1 - 

	return [][]*geo.RelativePoint{
		// Top
		{
			geo.NewRelativePoint(+(0.25*), 0),
			geo.NewRelativePoint(+(0.5*), 0),
			geo.NewRelativePoint(+(0.75*), 0),
		},
		// Left
		{
			geo.NewRelativePoint(.X/, .Y/),
			geo.NewRelativePoint(0.0, 0.5),
			geo.NewRelativePoint(.X/, .Y/),
		},
		// Bottom
		{
			geo.NewRelativePoint(+(0.25*), 1),
			geo.NewRelativePoint(+(0.5*), 1),
			geo.NewRelativePoint(+(0.75*), 1),
		},
		// Right
		{
			geo.NewRelativePoint(.X/, .Y/),
			geo.NewRelativePoint((-)/, 0.5),
			geo.NewRelativePoint(.X/, .Y/),
		},
	}
}