const mongoose = require('mongoose')
const mongoosePaginate = require('mongoose-paginate-v2')
const timestamp = require('mongoose-timestamp')
const userSchema = new mongoose.Schema({
  mobile: {
    type: String,
    required: false,
    trim: true,
    unique: true
  },
  otp: {
    type: String,
    required: false,
    trim: true,
    minLength: 6,
    maxLength: 6,
    default: null
  },
  user_name: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  password: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  first_name: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  last_name: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  user_type: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  is_verified: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: 'none'
  },
  profile_image: {
    type: String,
    required: false,
    trim: true,
    default: null
  },
  national_card_image: {
    type: String,
    required: false,
    trim: true,
    default: null
  },
  expertise: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  sub_expertise: {
    type: [String], // تغییر نوع به آرایه از استرینگ
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  gender: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  height: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  weight: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  size: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  eye_color: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  hair_color: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  cooperation_type: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  cooperation_abroad: {
    type: Boolean,
    required: false,
    default: null
  },
  conversation_projects: {
    type: Boolean,
    required: false,
    default: null
  },
  bio: {
    type: String,
    required: false,
    minLength: 1,
    maxLength: 1024,
    default: null
  },
  national_code: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  birthday: {
    type: Date,
    required: false,
    default: null
  },
  is_Register: {
    type: String,
    
    default: false
  },
  shaba: {
    type: String,
    required: false,
    trim: true,
    minLength: 1,
    maxLength: 255,
    default: null
  },
  address: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  province: {
    type: Object,
    default: null
  },
  city: {
    type: Object,
    default: null
  },
  lat: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  lng: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  show_location: {
    type: Boolean,
    required: false,
    default: null
  },
  rate: {
    type: String,
    trim: true,
    maxLength: 512,
    default: null
  },
  referral_code: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  shop_id: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Shop',
    default: null
  },
  last_online: {
    type: Date, // ذخیره تاریخ و زمان آخرین بازدید
    default: Date.now // تنظیم تاریخ به تاریخ فعلی
  },
  business_license: {
    type: String,
    required: false,
    trim: true,
    default: null
  },
  user_level: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  user_score: {
    type: String,
    trim: true,
    minLength: 1,
    maxLength: 512,
    default: null
  },
  last_post: {
    type: Object,
    default: null
  },
  // user_ratings: [{
  //   project_id: {
  //     type: mongoose.Schema.Types.ObjectId,
  //     ref: 'Project',
  //     required: true
  //   },
  //   creator_id: {
  //     type: mongoose.Schema.Types.ObjectId,
  //     ref: 'User',
  //     required: true
  //   },
  //   rating: {
  //     type: Number,
  //     required: true
  //   },
  //   comment: {
  //     type: String,
  //     trim: true
  //   }
  // }],
  daily_free_request: {
    type: Number,
    default: 1
  },
  last_free_request_date: {
    type: Date,
    default: null
  },
  blocked_by: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }],
  blocked_users: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }],
  block_status: {
    type: Boolean,
    required: false,
    default: null
  },
  advertising_profiles: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'AdvertisingProfile'
  }],
  services: [{
    title: {
      type: String,
      required: true,
      trim: true
    },
    originalPrice: {
      type: String,
      required: true
    },
    discountPrice: {
      type: String,
      required: false
    },
    discountPercentage: {
      type: Number,
      required: false
    },
    status: {
      type: String,
      default: "UnderReview",
      required: false
    },
    image: {
      type: String,
      required: false,
      trim: true
    }
  }],
  monthly_free_offer: {
    type: Number,
    default: 1
  },
  last_free_offer_date: {
    type: Date,
    default: null
  }
  // contactInfo: {
  //   phone: String,
  //   mobile: String,
  //   telegramLink: String,
  //   whatsappNumber: String,
  //   instagramLink: String,
  //   saveInfoForNextAds: { type: Boolean, default: false }
  // },
  // adTotalRatings: {
  //   type: Number,
  //   default: 0
  // },
  // adRatingsCount: {
  //   type: Number,
  //   default: 0
  // },
  // adAverageRating: {
  //   type: Number,
  //   default: 0
  // }
})

userSchema.plugin(timestamp)
userSchema.plugin(mongoosePaginate)
const UserModel = mongoose.model('User', userSchema)
module.exports = UserModel
