package chart

import (
	"testing"
	"time"

	assert "github.com/blendlabs/go-assert"
	"github.com/wcharczuk/go-chart/util"
)

func TestMarketHoursRangeGetDelta(t *testing.T) {
	assert := assert.New(t)

	r := &MarketHoursRange{
		Min:             time.Date(2016, 07, 19, 9, 30, 0, 0, util.Date.Eastern()),
		Max:             time.Date(2016, 07, 22, 16, 00, 0, 0, util.Date.Eastern()),
		MarketOpen:      util.NYSEOpen(),
		MarketClose:     util.NYSEClose(),
		HolidayProvider: util.Date.IsNYSEHoliday,
	}

	assert.NotZero(r.GetDelta())
}

func TestMarketHoursRangeTranslate(t *testing.T) {
	assert := assert.New(t)

	r := &MarketHoursRange{
		Min:             time.Date(2016, 07, 18, 9, 30, 0, 0, util.Date.Eastern()),
		Max:             time.Date(2016, 07, 22, 16, 00, 0, 0, util.Date.Eastern()),
		MarketOpen:      util.NYSEOpen(),
		MarketClose:     util.NYSEClose(),
		HolidayProvider: util.Date.IsNYSEHoliday,
		Domain:          1000,
	}

	weds := time.Date(2016, 07, 20, 9, 30, 0, 0, util.Date.Eastern())

	assert.Equal(0, r.Translate(util.Time.ToFloat64(r.Min)))
	assert.Equal(400, r.Translate(util.Time.ToFloat64(weds)))
	assert.Equal(1000, r.Translate(util.Time.ToFloat64(r.Max)))
}

func TestMarketHoursRangeGetTicks(t *testing.T) {
	assert := assert.New(t)

	r, err := PNG(1024, 1024)
	assert.Nil(err)

	f, err := GetDefaultFont()
	assert.Nil(err)

	defaults := Style{
		Font:      f,
		FontSize:  10,
		FontColor: ColorBlack,
	}

	ra := &MarketHoursRange{
		Min:             util.Date.On(util.NYSEOpen(), util.Date.Date(2016, 07, 18, util.Date.Eastern())),
		Max:             util.Date.On(util.NYSEClose(), util.Date.Date(2016, 07, 22, util.Date.Eastern())),
		MarketOpen:      util.NYSEOpen(),
		MarketClose:     util.NYSEClose(),
		HolidayProvider: util.Date.IsNYSEHoliday,
		Domain:          1024,
	}

	ticks := ra.GetTicks(r, defaults, TimeValueFormatter)
	assert.NotEmpty(ticks)
	assert.Len(ticks, 5)
	assert.NotEqual(util.Time.ToFloat64(ra.Min), ticks[0].Value)
	assert.NotEmpty(ticks[0].Label)
}