package v1

import "github.com/pingcap-inc/security/internal/alert-server/store"

type Service interface {
	GoogleAlert() GoogleAlertSrv
	PortScan() PortScanSrv
	DownLoadAlert() DownloadAlertSrv
	MonthlyReport() monthlyReportSrv
	FeilianAlert() FeilianAlertSrv
	DocRetrieve() DocRetrieveSrv
	DocCheck() DocCheckSrv
	ContractScan() ContractScanSrv
	Fsc() FscSrv
	CompanySearch() CompanySearchSrv
	Duns() DunsSrv
	ExternalUser() ExternalUserSrv
}

type service struct {
	store store.Factory
}

func NewService(store store.Factory) Service {
	return &service{
		store: store,
	}
}

func (s *service) GoogleAlert() GoogleAlertSrv {
	return newGoogleAlert(s)
}

func (s *service) PortScan() PortScanSrv {
	return newPortScan(s)
}

func (s *service) DownLoadAlert() DownloadAlertSrv {
	return newDownloadAlert(s)
}

func (s *service) MonthlyReport() monthlyReportSrv {
	return NewMonthlyReportService(s)
}

func (s *service) FeilianAlert() FeilianAlertSrv {
	return newFeilianAlert(s)
}

func (s *service) DocRetrieve() DocRetrieveSrv {
	return newDocRetrieve(s)
}

func (s *service) DocCheck() DocCheckSrv {
	return newDocCheck(s)
}

func (s *service) ContractScan() ContractScanSrv {
	return newContractScan(s)
}

func (s *service) Fsc() FscSrv {
	return newFsc(s)
}

func (s *service) CompanySearch() CompanySearchSrv {
	return newCompanySearch(s)
}

func (s *service) Duns() DunsSrv {
	return newDuns(s)
}

func (s *service) ExternalUser() ExternalUserSrv {
	return newExternalUser(s)
}
