// Copyright 2015 The Vanadium 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 swift

import (
	"bufio"
	"strings"
)

// swiftDoc transforms the provided VDL doc and a doc suffix into the SwiftDoc format.
func swiftDoc(doc, suffix string) string {
	if doc == "" && suffix == "" {
		return ""
	}
	if doc == "" {
		doc = suffix
	} else if suffix != "" {
		doc = doc + "\n" + suffix
	}
	ret := ""
	reader := bufio.NewReader(strings.NewReader(doc))
	hitContent := false
	for {
		line, err := reader.ReadString('\n')
		if err != nil {
			// A purely empty comment gets ignored
			if !hitContent {
				ret = ""
			}
			return ret
		}
		line = strings.TrimSpace(line)
		if strings.HasPrefix(line, "//") {
			// Three consequtive slashes is the format for Swiftdoc. Add the additional beyond what the line starts with.
			ret += "/"
			ret += line
			ret += "\n"
			if !hitContent && line != "//" {
				hitContent = true
			}
		}
	}
}
