package main

import (
	"sync"
	"time"
)

// Fruit represents a sweet, fresh fruit.
type Fruit struct {
	Name    string    `json:"name" validate:"required" example:"banana"`
	Origin  string    `json:"origin" validate:"required" description:"Country of origin of the fruit" enum:"ecuador,france,senegal,china,spain"`
	Price   float64   `json:"price" validate:"required" description:"Price in euros" example:"5.13"`
	AddedAt time.Time `json:"-" binding:"-" description:"Date of addition of the fruit to the market"`
}

// TypeName implements openapi.Typer interface for Fruit.
func (f *Fruit) TypeName() string { return "RottenFruit" }

// Market is a fruit market.
type Market struct {
	fruits map[string]*Fruit
	sync.RWMutex
}

var market *Market

func init() {
	market = &Market{
		fruits:  make(map[string]*Fruit),
		RWMutex: sync.RWMutex{},
	}
	for _, f := range fruits {
		market.fruits[f.Name] = f
	}
}

var fruits = []*Fruit{
	{"banana", "ecuador", 2.99, time.Now()},
	{"apricot", "france", 4.50, time.Now()},
	{"mango", "senegal", 6.99, time.Now()},
	{"litchi", "china", 5.65, time.Now()},
	{"apple", "france", 2.49, time.Now()},
	{"peach", "spain", 3.20, time.Now()},
	{"peach", "spain", 3.20, time.Now()},
}