text: "use strict";
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
      if (k2 === undefined) k2 = k;
      Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
  }) : (function(o, m, k, k2) {
      if (k2 === undefined) k2 = k;
      o[k2] = m[k];
  }));
  var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
      Object.defineProperty(o, "default", { enumerable: true, value: v });
  }) : function(o, v) {
      o["default"] = v;
  });
  var __importStar = (this && this.__importStar) || function (mod) {
      if (mod && mod.__esModule) return mod;
      var result = {};
      if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
      __setModuleDefault(result, mod);
      return result;
  };
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
      function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
      return new (P || (P = Promise))(function (resolve, reject) {
          function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
          function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
          function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
          step((generator = generator.apply(thisArg, _arguments || [])).next());
      });
  };
  var __importDefault = (this && this.__importDefault) || function (mod) {
      return (mod && mod.__esModule) ? mod : { "default": mod };
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.validateLoginUser = exports.validateGoogleUser = exports.validateUser = void 0;
  const bcrypt_1 = __importDefault(require("bcrypt"));
  const joi_1 = __importDefault(require("joi"));
  const mongoose_1 = __importStar(require("mongoose"));
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
  const config_1 = require("../utils/config");
  const userSchema = new mongoose_1.Schema({
      name: {
          type: String,
          required: true,
      },
      email: {
          type: String,
          required: true,
      },
      password: {
          type: String,
      },
  });
  userSchema.methods.comparePassword = function (password) {
      return __awaiter(this, void 0, void 0, function* () {
          return bcrypt_1.default.compare(password, this.password);
      });
  };
  userSchema.methods.hashPassword = function () {
      return __awaiter(this, void 0, void 0, function* () {
          this.password = yield bcrypt_1.default.hash(this.password, 10);
      });
  };
  userSchema.methods.generateAuthToken = function () {
      const token = jsonwebtoken_1.default.sign({
          _id: String(this._id),
          name: this.name,
          email: this.email,
      }, config_1.SECRET);
      return token;
  };
  function validateUser(user) {
      const schema = joi_1.default.object({
          name: joi_1.default.string().required(),
          email: joi_1.default.string().email().required(),
          password: joi_1.default.string().required(),
      });
      return schema.validate(user, { stripUnknown: true, abortEarly: true });
  }
  exports.validateUser = validateUser;
  function validateGoogleUser(user) {
      const schema = joi_1.default.object({
          name: joi_1.default.string().required(),
          email: joi_1.default.string().email().required(),
      });
      return schema.validate(user, { stripUnknown: true, abortEarly: true });
  }
  exports.validateGoogleUser = validateGoogleUser;
  function validateLoginUser(user) {
      const schema = joi_1.default.object({
          email: joi_1.default.string().email().required(),
          password: joi_1.default.string().required(),
      });
      return schema.validate(user, { stripUnknown: true, abortEarly: true });
  }
  exports.validateLoginUser = validateLoginUser;
  const User = mongoose_1.default.model("user", userSchema);
  exports.default = User;
  