// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package ecsobserver // import "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver"

import (
	"context"

	"go.opentelemetry.io/collector/component"
	"go.opentelemetry.io/collector/extension"
	"go.uber.org/zap"
)

var _ extension.Extension = (*ecsObserver)(nil)

// ecsObserver implements component.ServiceExtension interface.
type ecsObserver struct {
	logger *zap.Logger
	sd     *serviceDiscovery

	// for Shutdown
	cancel func()
}

// Start runs the service discovery in background
func (e *ecsObserver) Start(_ context.Context, host component.Host) error {
	e.logger.Info("Starting ECSDiscovery")
	// Ignore the ctx parameter as it is not for long running operation
	ctx, cancel := context.WithCancel(context.Background())
	e.cancel = cancel
	go func() {
		if err := e.sd.runAndWriteFile(ctx); err != nil {
			e.logger.Error("ECSDiscovery stopped by error", zap.Error(err))
			// Stop the collector
			host.ReportFatalError(err)
		}
	}()
	return nil
}

func (e *ecsObserver) Shutdown(_ context.Context) error {
	e.logger.Info("Stopping ECSDiscovery")
	e.cancel()
	return nil
}