package requisitions

import (
	"context"

	"github.com/TaruLab/keluargamart-backend/internal/db"
	"github.com/jackc/pgx/v5/pgxpool"
)

// Repository implements Store on a pgx pool (sqlc-backed).
type Repository struct {
	q    *db.Queries
	pool *pgxpool.Pool
}

// NewRepository builds a Repository.
func NewRepository(pool *pgxpool.Pool) *Repository {
	return &Repository{q: db.New(pool), pool: pool}
}

func (r *Repository) CreateRequisition(ctx context.Context, p db.CreatePurchaseRequisitionParams) (db.CreatePurchaseRequisitionRow, error) {
	return r.q.CreatePurchaseRequisition(ctx, p)
}

func (r *Repository) CreateRequisitionItem(ctx context.Context, p db.CreatePurchaseRequisitionItemParams) error {
	return r.q.CreatePurchaseRequisitionItem(ctx, p)
}

func (r *Repository) ListRequisitions(ctx context.Context, f db.ListPurchaseRequisitionsParams) ([]db.ListPurchaseRequisitionsRow, error) {
	return r.q.ListPurchaseRequisitions(ctx, f)
}

func (r *Repository) CountRequisitions(ctx context.Context, f db.CountPurchaseRequisitionsParams) (int64, error) {
	return r.q.CountPurchaseRequisitions(ctx, f)
}

func (r *Repository) RequisitionByID(ctx context.Context, id int64) (db.GetPurchaseRequisitionRow, error) {
	return r.q.GetPurchaseRequisition(ctx, id)
}

func (r *Repository) RequisitionItems(ctx context.Context, requisitionID int64) ([]db.ListPurchaseRequisitionItemsRow, error) {
	return r.q.ListPurchaseRequisitionItems(ctx, requisitionID)
}

func (r *Repository) UpdateRequisitionReview(ctx context.Context, p db.UpdatePurchaseRequisitionReviewParams) (int64, error) {
	return r.q.UpdatePurchaseRequisitionReview(ctx, p)
}
