package display

import (
	"android/soong/android"
	"android/soong/cc"

	"github.com/google/blueprint/proptools"
)

func init() {
	android.RegisterModuleType("display_go_defaults", display_DefaultsFactory)
}

func display_DefaultsFactory() android.Module {
	module := cc.DefaultsFactory()
	android.AddLoadHook(module, display_Defaults)
	return module
}

func display_Defaults(ctx android.LoadHookContext) {
	type props struct {
		Enabled *bool
	}
	p := &props{}
	p.Enabled = display_globalDefaults(ctx)
	ctx.AppendProperties(p)
}

func display_globalDefaults(ctx android.LoadHookContext) *bool {
	var module_enabled *bool

	if android.ExistentPathForSource(ctx, "vendor/qcom/sm8150/codeaurora/commonsys-intf/display/Android.bp").Valid() == false {
		module_enabled = proptools.BoolPtr(false)
	}

	return module_enabled
}
