package reference

import (
	"time"
)

// BaseRequest contains common fields for all BPJS requests
type BaseRequest struct {
	RequestID string    `json:"request_id,omitempty"`
	Timestamp time.Time `json:"timestamp,omitempty"`
}

// BaseResponse contains common response fields
type BaseResponse struct {
	Status    string `json:"status"`
	Message   string `json:"message,omitempty"`
	RequestID string `json:"request_id,omitempty"`
	Timestamp string `json:"timestamp,omitempty"`
}

// ErrorResponse represents error response structure
type ErrorResponse struct {
	Status    string                 `json:"status"`
	Message   string                 `json:"message"`
	RequestID string                 `json:"request_id,omitempty"`
	Errors    map[string]interface{} `json:"errors,omitempty"`
	Code      string                 `json:"code,omitempty"`
}

// PaginationRequest contains pagination parameters
type PaginationRequest struct {
	Page    int    `json:"page" validate:"min=1"`
	Limit   int    `json:"limit" validate:"min=1,max=100"`
	SortBy  string `json:"sort_by,omitempty"`
	SortDir string `json:"sort_dir,omitempty" validate:"omitempty,oneof=asc desc"`
}

// PaginationResponse contains pagination metadata
type PaginationResponse struct {
	CurrentPage  int   `json:"current_page"`
	TotalPages   int   `json:"total_pages"`
	TotalItems   int64 `json:"total_items"`
	ItemsPerPage int   `json:"items_per_page"`
	HasNext      bool  `json:"has_next"`
	HasPrev      bool  `json:"has_previous"`
}

// MetaInfo contains additional metadata
type MetaInfo struct {
	Version     string `json:"version"`
	Environment string `json:"environment"`
	ServerTime  string `json:"server_time"`
}
