// Copyright 2020 CUE Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package build

// This file describes how various cross-cutting modes influence default
// settings.
//
// It is used by gen.go to compile the instance into Go data, which is then
// used by the rest of the package to determine settings.
//
// There

// A File corresponds to a Go build.File.
#File: {
	filename:        string
	encoding:        #Encoding
	interpretation?: #Interpretation
	form?:           #Form
	tags?: {[string]: string}
}

// Default is the file used for stdin and stdout. The settings depend
// on the file mode.
#Default: #File & {
	filename: *"-" | string
}

// A FileInfo defines how a file is encoded and interpreted.
#FileInfo: {
	#File

	// For each of these fields it is explained what a true value means
	// for encoding/decoding.

	data:         *true | false // include/allow regular fields
	references:   *true | false // don't resolve/allow references
	cycles:       *true | false // cycles are permitted
	definitions:  bool          // include/allow definition fields
	optional:     bool          // include/allow definition fields
	constraints:  bool          // include/allow constraints
	keepDefaults: bool          // select/allow default values
	incomplete:   bool          // permit incomplete values
	imports:      bool          // don't expand/allow imports
	stream:       bool          // permit streaming
	docs:         bool          // show/allow docs
	attributes:   bool          // include/allow attributes
}

// modes sets defaults for different operational modes.
//
// These templates are intended to be unified in at the root of this
// configuration.
modes: _

// input defines modes for input, such as import, eval, vet or def.
// In input mode, settings flags are interpreted as what is allowed to occur
// in the input. The default settings, therefore, tend to be permissive.
modes: input: {
	#Default: {
		encoding: *"cue" | _
		...
	}
	#FileInfo: x, let x = {
		docs:       *true | false
		attributes: *true | false
	}
	encodings: cue: {
		*forms.schema | _
	}
	extensions: ".json": interpretation: *"auto" | _
	extensions: ".yaml": interpretation: *"auto" | _
	extensions: ".yml": interpretation:  *"auto" | _
}

modes: export: {
	#Default: {
		encoding: *"json" | _
		...
	}
	#FileInfo: x, let x = {
		docs:       true | *false
		attributes: true | *false
	}
	encodings: cue: {
		*forms.data | _
	}
}

modes: ouptut: {
	#FileInfo: x, let x = {
		docs:       true | *false
		attributes: true | *false
	}
	encodings: cue: {
		*forms.data | _
	}
}

// eval is a legacy mode
modes: eval: {
	#Default: {
		encoding: *"cue" | _
		...
	}
	#FileInfo: x, let x = {
		docs:       true | *false
		attributes: true | *false
	}
	encodings: cue: {
		*forms.final | _
	}
}

modes: def: {
	#Default: {
		encoding: *"cue" | _
		...
	}
	#FileInfo: x, let x = {
		docs:       *true | false
		attributes: *true | false
	}
	encodings: cue: {
		*forms.schema | _
	}
}

// Extension maps file extensions to default file properties.
extensions: {
	"":        _
	".cue":    tags.cue
	".json":   tags.json
	".jsonl":  tags.jsonl
	".ldjson": tags.jsonl
	".ndjson": tags.jsonl
	".yaml":   tags.yaml
	".yml":    tags.yaml
	".txt":    tags.text
	".go":     tags.go
	".proto":  tags.proto
	// TODO: jsonseq,
	// ".textproto": tags.textpb
	// ".pb":        tags.binpb
}

// A Encoding indicates a file format for representing a program.
#Encoding: !="" // | error("no encoding specified")

// An Interpretation determines how a certain program should be interpreted.
// For instance, data may be interpreted as describing a schema, which itself
// can be converted to a CUE schema.
#Interpretation: string
#Form:           string

file: #FileInfo & {

	filename: "foo.json"
	form:     "schema"
}

// tags maps command line tags to file properties.
tags: {
	schema: form: "schema"
	graph: form:  "graph"
	dag: form:    "dag"
	data: form:   "data"

	cue: encoding: "cue"

	json: encoding:  "json"
	jsonl: encoding: "jsonl"
	yaml: encoding:  "yaml"
	proto: encoding: "proto"
	// "textpb": encodings.textproto
	// "binpb":  encodings.binproto
	text: {
		encoding: "text"
		form:     "data"
	}
	go: {
		encoding:       "code"
		interpretation: ""
		tags: lang: "go"
	}
	code: {
		encoding:       "code"
		interpretation: ""
		tags: lang: string
	}

	auto: {
		interpretation: "auto"
		encoding:       *"json" | _
	}
	jsonschema: {
		interpretation: "jsonschema"
		encoding:       *"json" | _
	}
	openapi: {
		interpretation: "openapi"
		encoding:       *"json" | _
	}
}

// forms defines schema for all forms. It does not include the form ID.
forms: [Name=string]: #FileInfo

forms: "": _

forms: schema: {
	form:   *"schema" | "final" | "graph"
	stream: true | *false

	incomplete:   *true | false
	definitions:  *true | false
	optional:     *true | false
	constraints:  *true | false
	keepDefaults: *true | false
	imports:      *true | false
	optional:     *true | false
}

forms: final: {
	form: "final"
	forms.schema

	keepDefaults: false
	optional:     false
}

forms: graph: {
	form: *"graph" | "dag" | "data"
	data: true

	incomplete:   false
	definitions:  false
	optional:     false
	constraints:  false
	keepDefaults: false
	imports:      false
}

forms: dag: {
	form: !="graph"
	forms.graph

	cycles: false
}

forms: data: {
	form: !="dag"
	forms.dag

	constraints: false
	references:  false
	cycles:      false
	imports:     false
	optional:    false
}

// encodings: "": error("no encoding specified")

encodings: cue: {
	stream: false
}

encodings: json: {
	forms.data
	stream:     *false | true
	docs:       false
	attributes: false
}

encodings: yaml: {
	forms.graph
	stream: false | *true
}

encodings: jsonl: {
	forms.data
	stream: true
}

encodings: text: {
	forms.data
	stream: false
}

encodings: toml: {
	forms.data
	stream: false
}

encodings: proto: {
	forms.schema
	encoding: "proto"
}

// encodings: textproto: {
//  forms.DataEncoding
//  encoding: "textproto"
// }

// encodings: binproto: {
//  forms.DataEncoding
//  encoding: "binproto"
// }

encodings: code: {
	forms.schema
	stream: false
}

interpretations: [Name=string]: #FileInfo

interpretations: "": _

interpretations: auto: {
	forms.schema
}

interpretations: jsonschema: {
	forms.schema
	encoding: *"json" | _
}

interpretations: openapi: {
	forms.schema
	encoding: *"json" | _
}
