// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package test

import "time"

type AddressInfo struct {
	Street string
	City   string
	State  string
	Zip    string
}

type CreditAgency enum {
	Equifax
	Experian
	TransUnion
}

type ExperianRating enum {
        Good
        Bad
}

type RatingsArray [4]int16

type EquifaxCreditReport struct {
	Rating           byte
	FourScoreRatings RatingsArray
}

type Tdh enum {
	Tom
	Dick
	Harry
}

type ExperianCreditReport struct {
	Rating ExperianRating
	TdhApprovals set[Tdh]
	Auditor Tdh
}

type TransUnionCreditReport struct {
	Rating	int16
	PreviousRatings map[string]int16
}

type AgencyReport union {
	EquifaxReport    EquifaxCreditReport
	ExperianReport   ExperianCreditReport
	TransUnionReport TransUnionCreditReport
}

type CreditReport struct {
	Agency	CreditAgency
	Report	AgencyReport
}

type Customer struct {
	Name              string
	Id                int64
	Active            bool
	Address           AddressInfo
	PreviousAddresses []AddressInfo
	Credit            CreditReport
}

type Invoice struct {
	CustId      int64
	InvoiceNum  int64
	InvoiceDate time.Time
	Amount      int64
	ShipTo      AddressInfo
}

type Numbers struct {
	B    byte
	Ui16 uint16
	Ui32 uint32
	Ui64 uint64
	I16  int16
	I32  int32
	I64  int64
	F32  float32
	F64  float64
	C64  complex64
	C128 complex128
}

type FooType struct {
	Bar BarType
}

type BarType struct {
	Baz BazType
}

type TitleOrValueType union {
	Title string
	Value int64
}

type BazType struct {
	Name         string
	TitleOrValue TitleOrValueType
}

type K struct {
	A byte
	B string
}

type V struct {
	A string
	B float32
}

type FunWithMaps struct {
	Key K
	Map map[K]V
	Confusing map[int16][]set[string]
}

type ManyMaps struct {
	B    map[bool]string
	By   map[byte]string
	U16  map[uint16]string
	U32  map[uint32]string
	U64  map[uint64]string
	I16  map[int16]string
	I32  map[int32]string
	I64  map[int64]string
	F32  map[float32]string
	F64  map[float64]string
	C64  map[complex64]string
	C128 map[complex128]string
	S    map[string]string
	Ms   map[string]map[string]string
	T    map[time.Time]string
}

type ManySets struct {
	B    set[bool]
	By   set[byte]
	U16  set[uint16]
	U32  set[uint32]
	U64  set[uint64]
	I16  set[int16]
	I32  set[int32]
	I64  set[int64]
	F32  set[float32]
	F64  set[float64]
	C64  set[complex64]
	C128 set[complex128]
	S    set[string]
	T    set[time.Time]
}

type BigData struct {
	Key string // A dup of the key stored in the value.
}
