// globalIdPut is handler for PUT /companies/{globalId}
// Update existing company. Updating ``globalId`` is not allowed.
func (api CompaniesAPI) globalIdPut(w http.ResponseWriter, r *http.Request) {

	globalID := mux.Vars(r)["globalId"]

	var company companydb.Company

	if err := json.NewDecoder(r.Body).Decode(&company); err != nil {
		http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
		return
	}

	companyMgr := companydb.NewCompanyManager(r)

	oldCompany, cerr := companyMgr.GetByName(globalID)
	if cerr != nil {
		log.Debug(cerr)
		http.Error(w, "Not found", http.StatusNotFound)
		return
	}

	if company.Globalid != globalID || company.GetId() != oldCompany.GetId() {
		http.Error(w, "Changing globalId or id is Forbidden!", http.StatusForbidden)
		return
	}

	if err := companyMgr.Save(&company); err != nil {
		log.Error("Error saving company:\n", err)
		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
		return
	}

}
// Post is handler for POST /companies
// Register a new company
func (api CompaniesAPI) Post(w http.ResponseWriter, r *http.Request) {

	var company companydb.Company

	if err := json.NewDecoder(r.Body).Decode(&company); err != nil {
		log.Debug("Error decoding the company:", err)
		http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
		return
	}

	if !company.IsValid() {
		log.Debug("Invalid organization")
		http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
		return
	}

	companyMgr := companydb.NewCompanyManager(r)
	err := companyMgr.Create(&company)
	if err != nil && err != db.ErrDuplicate {
		log.Error("Error saving company:", err.Error())
		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
		return
	}

	if err == db.ErrDuplicate {
		log.Debug("Duplicate company:", company)
		http.Error(w, http.StatusText(http.StatusConflict), http.StatusConflict)
		return
	}

	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusCreated)

	json.NewEncoder(w).Encode(&company)
}
// globalIdinfoGet is handler for GET /companies/{globalid}/info
func (api CompaniesAPI) globalIdinfoGet(w http.ResponseWriter, r *http.Request) {
	companyMgr := companydb.NewCompanyManager(r)

	globalID := mux.Vars(r)["globalId"]

	company, err := companyMgr.GetByName(globalID)
	if err != nil {
		http.Error(w, "Not found", http.StatusNotFound)
		return
	}

	respBody := company

	w.Header().Set("Content-type", "application/json")
	json.NewEncoder(w).Encode(&respBody)
}