package models

import (
	"fmt"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/postgres" //
)

const (
	host     = "localhost"
	port     = 5432
	user     = "test"
	password = "test"
	dbname   = "test"
)

var psqlInfo string
var db *gorm.DB

func init() {
	psqlInfo = fmt.Sprintf("host=%s port=%d user=%s "+
		"password=%s dbname=%s sslmode=disable",
		host, port, user, password, dbname)
	DB()

}
func DB() (*gorm.DB, error) {
	if db == nil {
		db, err := gorm.Open("postgres", psqlInfo)
		db.LogMode(true)
		return db, err
	}
	return db, nil

}

func create(m interface{}) error {
	db, err := DB()
	if err != nil {
		return err
	}
	return db.Create(m).Error
}

func read(m interface{}) error {
	db, err := DB()
	if err != nil {
		return err
	}
	return db.Where(m).First(m).Error
}

func readAll(m interface{}) error {
	db, err := DB()
	if err != nil {
		return err
	}
	return db.Find(m).Error
}

func update(m interface{}) error {
	db, err := DB()
	defer db.Close()
	if err != nil {
		return err
	}
	return db.Save(m).Error
}

func delete(m interface{}) error {
	db, err := DB()
	defer db.Close()
	if err != nil {
		return err
	}
	return db.Delete(m).Error
}