// 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 demodb

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 EquifaxCreditReport struct {
	Rating byte
}

type ExperianCreditReport struct {
	Rating ExperianRating
}

type TransUnionCreditReport struct {
	Rating	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
	Credit  CreditReport
}

type Invoice struct {
	CustId     int64
	InvoiceNum int64
	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
}

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 Array2String [2]string

type Composite struct {
	Arr     Array2String
	ListInt []int32
	MySet   set[int32]
	Map     map[string]int32
}

type Times struct {
	Stamp    time.Time
	Interval time.Duration
}

type Recursive struct {
	Any   any
	Maybe ?Times
	Rec   map[Array2String]Recursive
}

type ActOrSatScore union {
	ActScore uint16
	SatScore uint16
}

type Student struct {
	Name     string
	TestTime time.Time
	Score    ActOrSatScore
}

type AnythingGoes struct {
	NameOfType string
	Anything   any
}
