package document_scraper

// DocumentScraperListRequest represents the request to list tenders pending document scraping
type DocumentScraperListRequest struct {
	Limit          int    `query:"limit" valid:"optional,range(1|100)"`
	Offset         int    `query:"offset" valid:"optional,range(0|1000000)"`
	CreatedAtFrom  *int64 `query:"created_at_from" valid:"optional"`
	CreatedAtTo    *int64 `query:"created_at_to" valid:"optional"`
	IncludeExpired bool   `query:"include_expired" valid:"optional"`
}

// Normalize applies default pagination bounds.
func (r *DocumentScraperListRequest) Normalize() {
	if r.Limit <= 0 {
		r.Limit = 20
	}
	if r.Limit > 100 {
		r.Limit = 100
	}
	if r.Offset < 0 {
		r.Offset = 0
	}
}

// DocumentScraperGetRequest represents the request to get a specific tender by notice publication ID
type DocumentScraperGetRequest struct {
	NoticeID string `param:"notice_id" valid:"required~Notice ID is required"`
}

// DocumentScraperTenderResponse is the minimal payload for the document scraper pipeline.
//
// ContractFolderID and NoticePublicationID are used to build MinIO paths:
//
//	PROC_<contract_folder_id>/<notice_publication_id>/documents/<file>
//	PROC_<contract_folder_id>/<notice_publication_id>/tender.json
type DocumentScraperTenderResponse struct {
	ContractFolderID    string `json:"contract_folder_id"`
	NoticePublicationID string `json:"notice_publication_id"`
	DocumentURL         string `json:"document_url"`
	Title               string `json:"title"`
	Description         string `json:"description"`
}

// DocumentScraperListResponse represents the paginated list response
type DocumentScraperListResponse struct {
	Tenders []DocumentScraperTenderResponse `json:"tenders"`
}
