package branch

import (
	"context"

	"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
)

type BranchStore interface {
	CreateBranch(ctx context.Context, branch domain.CreateBranch) (domain.Branch, error)
	GetBranchByID(ctx context.Context, id int64) (domain.BranchDetail, error)
	GetBranchByManagerID(ctx context.Context, branchManagerID int64) ([]domain.BranchDetail, error)
	GetBranchByCompanyID(ctx context.Context, companyID int64) ([]domain.BranchDetail, error)
	GetAllBranches(ctx context.Context) ([]domain.BranchDetail, error)
	SearchBranchByName(ctx context.Context, name string) ([]domain.BranchDetail, error)
	UpdateBranch(ctx context.Context, branch domain.UpdateBranch) (domain.Branch, error)
	DeleteBranch(ctx context.Context, id int64) error
	CreateBranchOperation(ctx context.Context, branchOperation domain.CreateBranchOperation) error
	CreateSupportedOperation(ctx context.Context, supportedOperation domain.CreateSupportedOperation) (domain.SupportedOperation, error)
	GetAllSupportedOperations(ctx context.Context) ([]domain.SupportedOperation, error)
	GetBranchOperations(ctx context.Context, branchID int64) ([]domain.BranchOperation, error)
	DeleteBranchOperation(ctx context.Context, branchID int64, operationID int64) error
	CreateBranchCashier(ctx context.Context, branchID int64, userID int64) error
	GetBranchByCashier(ctx context.Context, userID int64) (domain.Branch, error)
	DeleteBranchCashier(ctx context.Context, userID int64) error

	GetBranchCounts(ctx context.Context, filter domain.ReportFilter) (total, active, inactive int64, err error)
	GetBranchDetails(ctx context.Context, filter domain.ReportFilter) (map[int64]domain.BranchDetail, error)

	GetAllCompaniesBranch(ctx context.Context) ([]domain.Company, error)
	GetBranchesByCompany(ctx context.Context, companyID int64) ([]domain.Branch, error)
}
