import { Schema } from "mongoose";
import { applyIdTransform, registerModel, stringId } from "../schema";
import { ROLES, USER_STATUSES } from "../types";

const UserSchema = new Schema(
  {
    _id: stringId,
    email: { type: String, required: true, unique: true, lowercase: true, trim: true },
    passwordHash: { type: String, default: undefined },
    googleSub: { type: String, default: undefined },
    fullName: { type: String, required: true },
    phone: { type: String, default: undefined },
    avatarUrl: { type: String, default: undefined },
    role: { type: String, enum: ROLES, default: "CUSTOMER" },
    status: { type: String, enum: USER_STATUSES, default: "PENDING_EMAIL_VERIFICATION" },
    locale: { type: String, default: "ar" },
    emailVerifiedAt: { type: Date, default: undefined },
    phoneVerifiedAt: { type: Date, default: undefined },
    passportUrl: { type: String, default: undefined },
    ownerVerificationStatus: {
      type: String,
      enum: ["NONE", "PENDING", "APPROVED", "REJECTED"],
      default: "NONE",
    },
    trustedOwner: { type: Boolean, default: false },
    ownerVerifiedAt: { type: Date, default: undefined },
    deletedAt: { type: Date, default: undefined },
  },
  { timestamps: true },
);

UserSchema.index({ googleSub: 1 }, { unique: true, partialFilterExpression: { googleSub: { $type: "string" } } });
UserSchema.index({ phone: 1 }, { unique: true, partialFilterExpression: { phone: { $type: "string" } } });
UserSchema.index({ role: 1, status: 1 });
UserSchema.index({ deletedAt: 1 });
applyIdTransform(UserSchema);

export const User = registerModel("User", UserSchema);
