package main

import (
	"fmt"
	"os"
	"time"

	"app/context"

	"syscall/zx"
	"syscall/zx/fidl"

	"fidl/fidl/examples/heartbeat"
)

type heartbeatImpl struct{}

func main() {
	quiet := (len(os.Args) > 1) && os.Args[1] == "-q"
	heartbeatService := &heartbeat.HeartbeatService{}
	c := context.CreateFromStartupInfo()
	c.OutgoingService.AddService(heartbeat.HeartbeatName, func(c zx.Channel) error {
		_, err := heartbeatService.Add(&heartbeatImpl{}, c, nil)
		return err
	})
	c.Serve()
	go fidl.Serve()

	go func() {
		for {
			time.Sleep(1 * time.Second)
			for key, _ := range heartbeatService.Bindings {
				if p, ok := heartbeatService.EventProxyFor(key); ok {
					if !quiet {
						fmt.Println("heartbeat server: sending heartbeat")
					}
					p.Heartbeat(false)
				}
			}
		}
	}()

	select {}
}
