package proxy

import "errors"

type Human struct {
	Gender string
	Age    int
}

type Bar interface {
	Welcome(Human) error
}

type OpenBar struct {
	Visitors []Human
}

func (b *OpenBar) Welcome(h Human) error {
	b.Visitors = append(b.Visitors, h)
	return nil
}

type BarProxy struct {
	bar Bar
}

func (b *BarProxy) Welcome(h Human) error {
	if h.Gender == "female" && h.Age < 20 {
		return errors.New("Females under 20 not allowed.")
	}

	if h.Gender == "male" && h.Age < 18 {
		return errors.New("Males under 18 not allowed.")
	}

	return b.bar.Welcome(h)
}