package downloader

import 

type cdnRequestRange struct {
	offset int64
	limit  int
}

const (
	cdnMinChunk = 4 * 1024
	cdnMaxChunk = 1024 * 1024
)

func ( int) int {
	for  := ;  >= cdnMinChunk;  -= cdnMinChunk {
		if cdnMaxChunk% == 0 {
			return 
		}
	}
	return 0
}

func ( int64,  int) ([]cdnRequestRange, error) {
	if  <= 0 {
		return nil, errors.Errorf("invalid CDN limit %d", )
	}
	if  < 0 {
		return nil, errors.Errorf("invalid CDN offset %d", )
	}
	if %cdnMinChunk != 0 {
		return nil, errors.Errorf("CDN offset %d must be divisible by %d", , cdnMinChunk)
	}
	if %cdnMinChunk != 0 {
		return nil, errors.Errorf("CDN limit %d must be divisible by %d", , cdnMinChunk)
	}

	 := 
	 := 
	 := make([]cdnRequestRange, 0, 1+/cdnMaxChunk)
	for  > 0 {
		 := int( % cdnMaxChunk)
		 := cdnMaxChunk - 
		 := 
		if  >  {
			 = 
		}
		// Step size is chosen from values allowed by CDN docs:
		// - divisible by 4KB
		// - divisor of 1MB.
		 := largestCDNValidLimit()
		if  == 0 {
			return nil, errors.Errorf("unable to build CDN request plan for offset=%d limit=%d", , )
		}
		 = append(, cdnRequestRange{
			offset: ,
			limit:  ,
		})
		 += int64()
		 -= 
	}

	return , nil
}