// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package file

var Config *FileConfig

type FileConfig struct {
	// Number of bytes to read in to capture copyright information
	// in regular source files.
	CopyrightSize int

	// Some characters in LICENSE texts are being parsed incorrectly.
	// Replace them with their utf8 equivalents so the resulting
	// NOTICE file renders it properly.
	Replacements []*Replacement

	// Extensions map is the list of filetypes that we can expect
	// may have license information included in it.
	Extensions map[string]bool
}

type Replacement struct {
	Replace string   `json:"replace"`
	With    string   `json:"with"`
	Notes   []string `json:"notes"`
}

func NewConfig() *FileConfig {
	return &FileConfig{
		CopyrightSize: 0,
		Replacements:  make([]*Replacement, 0),
		Extensions:    make(map[string]bool, 0),
	}
}

func (c *FileConfig) Merge(other *FileConfig) {
	if c.CopyrightSize == 0 {
		c.CopyrightSize = other.CopyrightSize
	}
	c.Replacements = append(c.Replacements, other.Replacements...)
	for k, v := range other.Extensions {
		c.Extensions[k] = v
	}
}
