package mysqlcrudoperation

import (
	"golangtemplate/servers/app/models"

	"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/dalmdl/mysql"
	"github.com/gin-gonic/gin"
)

func ReadDataFromMySql(c *gin.Context) {

	//get default connection
	mysqlDAO := mysql.GetMySQLDAO()

	//You can use also use below method for connection, if you want use database other than default db
	// mysqlDAO := mysql.GetMySQLDAOWithHost("MySQLHostDummy")

	employees, err := mysqlDAO.SelectQuery("select * from Employees")
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"employees": employees.Value(),
	})
}

func WriteDataToMySql(c *gin.Context) {
	var emp models.Employee
	if err := c.Bind(&emp) != nil; err {
		c.JSON(400, gin.H{
			"error": err,
		})
	}
	mysqlDAO := mysql.GetMySQLDAO()

	_, err := mysqlDAO.ExecQuery("insert into Employees values (?,?)", emp.Name, emp.Location)
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	employees, err := mysqlDAO.SelectQuery("select * from Employees")
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"status":    "inserted",
		"employees": employees.Value(),
	})
}

func UpdateMySqlData(c *gin.Context) {
	var emp models.Employee
	if err := c.Bind(&emp) != nil; err {
		c.JSON(400, gin.H{
			"error": err,
		})
	}
	mysqlDAO := mysql.GetMySQLDAO()

	_, err := mysqlDAO.ExecQuery("update Employees set location=? where name=?", emp.Location, emp.Name)
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	employees, err := mysqlDAO.SelectQuery("select * from Employees")
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"status":    "Updated",
		"employees": employees.Value(),
	})
}

func DeleteDataFromMySql(c *gin.Context) {
	var emp models.Employee
	if err := c.Bind(&emp) != nil; err {
		c.JSON(400, gin.H{
			"error": err,
		})
	}
	mysqlDAO := mysql.GetMySQLDAO()
	_, err := mysqlDAO.ExecQuery("delete from Employees where name=?", emp.Name)
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	employees, err := mysqlDAO.SelectQuery("select * from Employees")
	if err != nil {
		c.JSON(500, gin.H{
			"error": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"status":    "DELETED",
		"employees": employees.Value(),
	})
}