package store

import (
	"context"

	v1 "github.com/pingcap-inc/security/model/v1"
)

type CompanyStore interface {
	// company
	CreateCompany(_ context.Context, record []v1.Company) error
	CreateCompanyOne(_ context.Context, records v1.Company) error
	ListCompany(_ context.Context) (records []v1.Company, err error)
	GetCompany(_ context.Context, name, country string) (record []*v1.Company, err error)
	GetCompanyByID(_ context.Context, id int) (record *v1.Company, err error)
	ListCompanyByStatus(_ context.Context, status int) (records []*v1.Company, err error)
	UpdateCompanyStatus(_ context.Context, record *v1.Company) error
	BatchUpdateCompanyStatus(_ context.Context, status int) error
	DeleteCompanyInformation(_ context.Context, id int) error

	// company problem
	SaveComProblem(_ context.Context, record *v1.CompanyProblem) error
	ListComProblem(_ context.Context) (records []v1.CompanyProblem, err error)
	GetComProblem(_ context.Context, name string) (record *v1.CompanyProblem, err error)

	// company sanction
	SaveSanction(_ context.Context, record *v1.CompanySanction) (uint64, error)
	ListSanction(_ context.Context) (records []v1.CompanySanction, err error)

	// company basic
	SaveCompanyBasic(_ context.Context, record *v1.CompanyBasic) error
	GetCompanyBasicByID(_ context.Context, id int) (record *v1.CompanyBasic, err error)
	DeleteCompanyBaiscByCompanyID(_ context.Context, companyID int) error
	ListCompanyBasic(_ context.Context) (records []v1.CompanyBasic, err error)

	// ListCompanyOthers(_ context.Context) (records []v1.CompanyBasic, err error)
	SaveSanctionReferences(_ context.Context, record []v1.CompanySanctionReferences) error
	ListSanctionReferences(_ context.Context) (records []v1.CompanySanctionReferences, err error)

	// company info principals contacts
	CreateCompanyInfoPrincipalsContacts(_ context.Context, record *v1.CompanyInfoPrincipalsContacts) error
	ListCompanyInfoPrincipalsContacts(_ context.Context) (records []v1.CompanyInfoPrincipalsContacts, err error)

	ListAllByCompanyIDs(_ context.Context, comIDs []uint64) (ci []*v1.CompanyProblem, cs []*v1.CompanySanction, csr []*v1.CompanySanctionReferences, co []*v1.CompanyBasic, err error)

	DeleteAll(_ context.Context) error
	SaveUserLog(_ context.Context, record *v1.UserLog) error

	// Web
	ListCompanyByWeb(companyName, country, from string, offset, pageSize int) (records []*v1.Company, total int64, err error)
	ListCompanyBasicByWeb(companyName, country string, companyID, offset, pageSize int) (records []*v1.CompanyBasic, total int64, err error)
	ListCompanyInfoPrincipalsContactsByWeb(companyID, offset, pageSize int) (records []*v1.CompanyInfoPrincipalsContacts, total int64, err error)
	ListProblemByWeb(companyName string, companyID, offset, pageSize int) (records []*v1.CompanyProblem, total int64, err error)
	ListSanctionByWeb(companyName, entityID string, companyID, offset, pageSize int) (records []*v1.CompanySanction, total int64, err error)
	ListReferenceByWeb(sanctionID, offset, pageSize int) (records []*v1.CompanySanctionReferences, total int64, err error)
}
