// 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" | _
}
