// Copyright 2017 Gerasimos Maropoulos, ΓΜ. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package view

import (
	"io"
)

// NoLayout disables the configuration's layout for a specific execution.
const NoLayout = "iris.nolayout"

// returns empty if it's no layout or empty layout and empty configuration's layout.
func getLayout(layout string, globalLayout string) string {
	if layout == NoLayout {
		return ""
	}

	if layout == "" && globalLayout != "" {
		return globalLayout
	}

	return layout
}

// Options should contains the dynamic options for the engine's ExecuteWriter.
type Options interface {
	// the per-execute layout,
	// most view engines will have a static configuration field for that too.
	GetLayout() string
	// should returns the dynamic binding data, which will be used inside the template file
	GetData() interface{}
} // this Options interface is implemented inside context, in order to use one import path for all context's methods.

// Engine is the interface which all viwe engines should be implemented in order to be adapted inside Iris.
type Engine interface {
	// Load should load the templates from a directory of by binary(assets/go-bindata).
	Load() error
	// ExecuteWriter should execute a template by its filename with an optional layout and bindingData.
	ExecuteWriter(w io.Writer, filename string, layout string, bindingData interface{}) error
	// Ext should return the final file extension which this view engine is responsible to render.
	Ext() string
}