package models

import (
	"errors"

	"github.com/gookit/validate"
	"github.com/sujit-baniya/fiber-boilerplate/app"
)

type Login struct {
	NombreUsuario string `json:"nombre_usuario" gorm:"nombre_usuario" form:"nombre_usuario" validate:"required"`
	Password      string `json:"password" gorm:"password" form:"password" validate:"required"`
}

// Messages you can custom validator error messages.
func (l Login) Messages() map[string]string {
	return validate.MS{
		"required":       "oh! the {field} is required",
		"nombre_usuario": "Is required",
	}
}

func (Login) TableName() string {
	return "users"
}

func (l *Login) CheckLogin() (*Users, error) {

	user, err := GetUserByUsuario(l.NombreUsuario)
	if err != nil {
		return nil, errors.New("Usuario inactivo o correo no verificado, Contacte con soporte")
	}

	if user.Password == "" {
		return nil, errors.New("no_password")
	}

	match, err := app.Http.Hash.Match(l.Password, user.Password)
	if err != nil {
		return nil, errors.New("Contraseña incorrecta")
	}
	if !match {
		return nil, errors.New("Usuario o contraseña incorrectos")
	}

	return user, nil
}
