const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;



const citySchema = new mongoose.Schema(
    {
      cityId:{type:String},
      //departmentName: { type: String },
      phone: { type: String, unique: true, trim: true },
      office_address1: String,
      officeName: { type: String },
      email: { type: String },
      address2: String,
      pincode: { type: String },
      zone: { type: String },
      city: { type: String },
      location: [{ type : String}],
      state: String,
      country: String,   
      services: { password: { bcrypt: String } }, 
      createdAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      createdBy: ObjectId,
      updatedAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      updatedBy: ObjectId, 
    },
    { versionKey: false }
  );
   

  const branchSchema = new mongoose.Schema(
    {
      branchId:{type:String},
      phone: { type: String, unique: true, trim: true },
      land_line_number: { type: String, unique: true, trim: true },
      office_address1: String,
      officeName: { type: String },
      email: { type: String },
      address2: String,
      pincode: { type: String },
      zone: { type: String , default: "ALL"},
      city: { type: String },
      location: [{ type : String}],
      state: String,
      country: String,   
      services: { password: { bcrypt: String } }, 
      createdAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      createdBy: ObjectId,
      updatedAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      updatedBy: ObjectId, 
    },
    { versionKey: false }
  );

  const zoneSchema = new mongoose.Schema(
    {
      zoneId:{type:String},
      officeName: { type: String },
      zone: { type: String , default: "ALL"},
      city: { type: String },
      location: [{ type : String}],
      createdAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      createdBy: ObjectId,
      updatedAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      updatedBy: ObjectId, 
    },
    { versionKey: false }
  );
   
  const departmentsSchema = new mongoose.Schema(
    {
      departmentId:{type:String},
      officeName: { type: String },
      desginationName: { type: String },
      phone: { type: String, unique: true, trim: true },
      alternativeContactNumber :  { type: String },
      reportingManager :  { type: String },
      reportingManager_mobile_number :  { type: String },
      reportingManager_email :  { type: String },
      location: [{ type : String}],
      firstName : { type: String },
      gender: { type: String },
      lastName:  { type: String },
      email: { type: String },
      personalEmail : {type: String},
      departmentName: { type: String },
      address1: String,
      address2: String,
      pincode: { type: String },
      zone: { type: String },
      city: { type: String },
      personal_city: { type: String },
      state: String,
      country: String,   
      picture:{type:String},
      dateOfJoin : { type: String },
      services: { password: { bcrypt: String } }, 
      createdAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      createdBy: ObjectId,
      updatedAt: {
        type: Date,
        default: function () {
          return Date.now();
        },
      },
      updatedBy: ObjectId, 
    },
    { versionKey: false }
  );

  const teamMemberProfilePictureSchema = new Schema({
    customerId: {
      type: String,
      unique: true,
      required: true
    },
    picture: {
      type: String, // Change the type to String
      required: true,
      validate: {
        validator: function (value) {
          const supportedFormats = ['jpg', 'jpeg', 'png'];
          const fileExtension = value.split('.').pop().toLowerCase();
          return supportedFormats.includes(fileExtension);
        },
        message: 'Picture must be a JPEG, PNG, or JPG image'
      }
    }
  });

  const companyProfilePictureSchema = new Schema({
    customerId: {
      type: String,
      unique: true,
      required: true
    },
    picture: {
      type: String, // Change the type to String
      required: true,
      validate: {
        validator: function (value) {
          const supportedFormats = ['jpg', 'jpeg', 'png'];
          const fileExtension = value.split('.').pop().toLowerCase();
          return supportedFormats.includes(fileExtension);
        },
        message: 'Picture must be a JPEG, PNG, or JPG image'
      }
    }
  });
   

  const City = mongoose.model('City', citySchema);
  const Deparments = mongoose.model('Deparments', departmentsSchema);
  const Branch = mongoose.model('Branch', branchSchema);
  const Zone = mongoose.model('Zone', zoneSchema);
  const TeamMemberProfilePicture = mongoose.model('TeamMemberProfilePicture', teamMemberProfilePictureSchema);
  const CompanyProfilePicture = mongoose.model('CompanyProfilePicture', companyProfilePictureSchema);


  module.exports = { City,Deparments,Branch,TeamMemberProfilePicture,CompanyProfilePicture,Zone};
