package service

import (
	"fmt"
	"reflect"

	cda "git.loafle.net/commons/di-go/annotation"
	cdr "git.loafle.net/commons/di-go/registry"
	ocsp "git.loafle.net/overflow/commons-go/service/probe"
	"git.loafle.net/overflow/probe/client/data"

	// For annotation
	_ "git.loafle.net/overflow/commons-go/core/annotation"
)

var DataClientServiceType = reflect.TypeOf((*DataClientService)(nil))

func init() {
	cdr.RegisterType(DataClientServiceType)
}

type DataClientService struct {
	ocsp.DataClientService
	RPCClientService

	cda.TypeAnnotation `annotation:"@overflow:RPCService()"`
}

func (s *DataClientService) InitService() error {
	if err := s.RPCClientService.InitService(); nil != err {
		return fmt.Errorf("DataClientService: InitService failed %v", err)
	}

	return nil
}

func (s *DataClientService) StartService() error {
	if err := s.RPCClientService.StartService(); nil != err {
		return fmt.Errorf("DataClientService: StartService failed %v", err)
	}

	client, err := data.New()
	if nil != err {
		return fmt.Errorf("ProbeClientService: StartService failed %v", err)
	}
	s.client = client

	if err := s.client.Start(); nil != err {
		return fmt.Errorf("DataClientService: StartService failed %v", err)
	}

	return nil
}

func (s *DataClientService) StopService() {
	s.RPCClientService.StopService()

}

func (s *DataClientService) DestroyService() {
	s.RPCClientService.DestroyService()
}
