package cmd

import (
  "fmt"

  "github.com/teamhephy/pkg/prettyprint"

  "github.com/teamhephy/controller-sdk-go/services"
)

// ServicesList lists extra services for the app
func (d *DeisCmd) ServicesList(appID string) error {
  s, appID, err := load(d.ConfigFile, appID)

  if err != nil {
    return err
  }

  services, err := services.List(s.Client, appID)
  if d.checkAPICompatibility(s.Client, err) != nil {
    return err
  }

  d.Printf("=== %s Services\n", appID)
  servicesMap := make(map[string]string)
  if len(services) > 0 {
    for _, service := range services {
      servicesMap[service.ProcfileType] = fmt.Sprintf("%v", service.PathPattern)
    }
    d.Print(prettyprint.PrettyTabs(servicesMap, 5))
  }
  return nil
}

// ServicesAdd adds a service to an app.
func (d *DeisCmd) ServicesAdd(appID, procfileType string, pathPattern string) error {
  s, appID, err := load(d.ConfigFile, appID)

  if err != nil {
    return err
  }

  d.Printf("Adding %s (%s) to %s... ", procfileType, pathPattern, appID)

  quit := progress(d.WOut)
  _, err = services.New(s.Client, appID, procfileType, pathPattern)
  quit <- true
  <-quit
  if d.checkAPICompatibility(s.Client, err) != nil {
    return err
  }

  d.Println("done")
  return nil
}

// ServicesRemove removes a service for procfileType registered with an app.
func (d *DeisCmd) ServicesRemove(appID, procfileType string) error {
  s, appID, err := load(d.ConfigFile, appID)

  if err != nil {
    return err
  }

  d.Printf("Removing %s from %s... ", procfileType, appID)

  quit := progress(d.WOut)
  err = services.Delete(s.Client, appID, procfileType)
  quit <- true
  <-quit
  if d.checkAPICompatibility(s.Client, err) != nil {
    return err
  }

  d.Println("done")
  return nil
}
