package main

import "director_detect"

type MyBar struct {
	val int
} // From director_detect.Bar

func NewMyBar() director_detect.Bar {
	return director_detect.NewDirectorBar(&MyBar{2})
}

func (p *MyBar) Get_value() int {
	p.val++
	return p.val
}

func (p *MyBar) Get_class() director_detect.A {
	p.val++
	return director_detect.NewA()
}

func (p *MyBar) Just_do_it() {
	p.val++
}

func (p *MyBar) Clone() director_detect.Bar {
	return director_detect.NewDirectorBar(&MyBar{p.val})
}

func main() {
	b := NewMyBar()

	f := b.Baseclass()

	v := f.Get_value()
	_ = f.Get_class()
	f.Just_do_it()

	c := b.DirectorInterface().(*MyBar).Clone()
	vc := c.Get_value()

	if (v != 3) || (b.DirectorInterface().(*MyBar).val != 5) || (vc != 6) {
		panic("Bad virtual detection")
	}
}
