package address

import (
	"github.com/micro/micro-go/client"
)

func NewAddressService(token string) *AddressService {
	return &AddressService{
		client: client.NewClient(&client.Options{
			Token: token,
		}),
	}
}

type AddressService struct {
	client *client.Client
}

// Lookup a list of UK addresses by postcode
func (t *AddressService) LookupPostcode(request *LookupPostcodeRequest) (*LookupPostcodeResponse, error) {
	rsp := &LookupPostcodeResponse{}
	return rsp, t.client.Call("address", "LookupPostcode", request, rsp)
}

type LookupPostcodeRequest struct {
	// UK postcode e.g SW1A 2AA
	Postcode string `json:"postcode"`
}

type LookupPostcodeResponse struct {
	Addresses []Record `json:"addresses"`
}

type Record struct {
	// building name
	BuildingName string `json:"buildingName"`
	// the county
	County string `json:"county"`
	// line one of address
	LineOne string `json:"lineOne"`
	// line two of address
	LineTwo string `json:"lineTwo"`
	// dependent locality
	Locality string `json:"locality"`
	// organisation if present
	Organisation string `json:"organisation"`
	// the postcode
	Postcode string `json:"postcode"`
	// the premise
	Premise string `json:"premise"`
	// street name
	Street string `json:"street"`
	// the complete address
	Summary string `json:"summary"`
	// post town
	Town string `json:"town"`
}
