//go:build !android && !ios && !freebsd && !js

package services

import (
	"context"
	"errors"
	"fmt"

	"github.com/wailsapp/wails/v3/pkg/application"
)

// Autostart facade over Wails' AutostartManager. The OS autostart entry registration
// is the single source of truth; nothing is mirrored to preferences.
type Autostart struct {
	mgr *application.AutostartManager
}

func NewAutostart(mgr *application.AutostartManager) *Autostart {
	return &Autostart{mgr: mgr}
}

func (a *Autostart) Supported(_ context.Context) bool {
	_, err := a.mgr.Status()
	return !errors.Is(err, application.ErrAutostartNotSupported)
}

// IsEnabled returns false without error on unsupported platforms.
func (a *Autostart) IsEnabled(_ context.Context) (bool, error) {
	enabled, err := a.mgr.IsEnabled()
	if err != nil {
		if errors.Is(err, application.ErrAutostartNotSupported) {
			return false, nil
		}
		return false, fmt.Errorf("read autostart state: %w", err)
	}
	return enabled, nil
}

// SetEnabled takes effect on the next login, not immediately.
func (a *Autostart) SetEnabled(_ context.Context, enabled bool) error {
	if enabled {
		if err := a.mgr.Enable(); err != nil {
			return fmt.Errorf("enable autostart: %w", err)
		}
		return nil
	}
	if err := a.mgr.Disable(); err != nil {
		return fmt.Errorf("disable autostart: %w", err)
	}
	return nil
}
