package queue

import "errors"

// RPCReq contains information for communicating with the RPC server
type RPCReq struct {
	method    string
	replyChan chan interface{}
}

// RPCResponse holds the response
type RPCResponse string

// Status contains RPC request information
type Status struct {
	queueChan chan RPCReq
}

// RPCArgs arg information for the RPC server
type RPCArgs struct{}

// Downloads gets download statuses
func (s *Status) Downloads(_ RPCArgs, reply *RPCResponse) error {
	replyChan := make(chan interface{})
	req := RPCReq{
		method:    "download_status",
		replyChan: replyChan,
	}

	s.queueChan <- req
	qReply := <-replyChan

	switch qReply.(type) {
	case string:
		*reply = RPCResponse(qReply.(string))
		break
	default:
		return errors.New("error: unexpected return value")
	}

	return nil
}