package test

import (
	"encoding/json"
	"os"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"
)

func TestRuleSilience(t *testing.T) {
	helperInit()

	rule1 := getRules().GetRule(60)
	t.Log(rule1)
	assert.Equal(t, false, rule1.IsNil())
	t.Log(rule1.InSilence(time.Now()))
	weekendTime := time.Now().AddDate(0, 0, int((time.Saturday - time.Now().Weekday())))
	assert.Equal(t, true, rule1.InSilence(weekendTime))
}

func TestRule(t *testing.T) {
	path := "../etc/rules.json"
	helperInit()
	time.Sleep(time.Second)

	rule1 := getRules().GetRule(1)
	assert.Equal(t, false, rule1.IsNil())
	assert.Equal(t, 10, rule1.TriggerGap)

	preRulesFileBytes, err := os.ReadFile(path)
	if err != nil {
		t.Fatal(err)
	}

	getRules().Rules[0].TriggerGap = 20
	rulesJsonBytes, err := json.Marshal(getRules())
	if err != nil {
		t.Fatal(err)
	}
	rulesfile, err := os.OpenFile(path, os.O_RDWR|os.O_TRUNC, 0600)
	if err != nil {
		t.Fatal(err)
	}
	t.Log("rewrite")
	_, err = rulesfile.Write(rulesJsonBytes)
	if err != nil {
		t.Fatal(err)
	}
	err = rulesfile.Close()
	if err != nil {
		t.Fatal(err)
	}
	time.Sleep(1 * time.Second)

	rule1Again := getRules().GetRule(1)
	assert.Equal(t, 10, rule1.TriggerGap)
	assert.Equal(t, 20, rule1Again.TriggerGap)
	// reset
	t.Log("reset")
	rulesfile, _ = os.OpenFile(path, os.O_RDWR|os.O_TRUNC, 0600)
	defer func() {
		err = rulesfile.Close()
		if err != nil {
			t.Log(err)
		}
	}()
	_, err = rulesfile.Seek(0, 0)
	_, err = rulesfile.Write(preRulesFileBytes)
	if err != nil {
		t.Fatal(err)
	}
	time.Sleep(time.Second)
}
