package cmd

import (
	"fmt"
	"os"

	"github.com/Masterminds/cookoo"
)

var yamlTpl = `# Glide YAML configuration file
# Set this to your fully qualified package name, e.g.
# github.com/Masterminds/foo. This should be the
# top level package.
package: %s

# Declare your project's dependencies.
import:
  # Fetch package similar to 'go get':
  #- package: github.com/Masterminds/cookoo
  # Get and manage a package with Git:
  #- package: github.com/Masterminds/cookoo
  #  # The repository URL
  #  repo: git@github.com:Masterminds/cookoo.git
  #  # A tag, branch, or SHA
  #  ref: 1.1.0
  #  # the VCS type (compare to bzr, hg, svn). You should
  #  # set this if you know it.
  #  vcs: git
`

// InitGlide initializes a new Glide project.
//
// Among other things, it creates a default glide.yaml.
//
// Params:
// 	- filename (string): The name of the glide YAML file. Default is glide.yaml.
// 	- project (string): The name of the project. Default is 'main'.
func InitGlide(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
	fname := p.Get("filename", "glide.yaml").(string)
	pname := p.Get("project", "main").(string)
	vdir := c.Get("VendorDir", "vendor").(string)

	if _, err := os.Stat(fname); err == nil {
		cwd, _ := os.Getwd()
		return false, fmt.Errorf("Cowardly refusing to overwrite %s in %s", fname, cwd)
	}
	f, err := os.Create(fname)
	if err != nil {
		return false, err
	}

	fmt.Fprintf(f, yamlTpl, pname)
	f.Close()

	os.MkdirAll(vdir, 0755)

	Info("Initialized. You can now edit '%s'\n", fname)
	return true, nil
}
