const mongoose = require('mongoose');

// Schema cho các link trong topbar
const topbarLinkSchema = new mongoose.Schema({
  text: {
    type: String,
    required: true,
    trim: true
  },
  url: {
    type: String,
    required: true,
    trim: true
  }
}, { _id: false });

// Schema cho contact info trong topbar
const contactInfoSchema = new mongoose.Schema({
  phone: {
    type: String,
    required: true,
    trim: true
  },
  email: {
    type: String,
    required: true,
    trim: true
  }
}, { _id: false });

// Schema cho topbar
const topbarSchema = new mongoose.Schema({
  contactInfo: {
    type: contactInfoSchema,
    required: true
  },
  links: {
    type: [topbarLinkSchema],
    default: []
  }
}, { _id: false });

// Main Header Schema
const headerSchema = new mongoose.Schema({
  name: {
    type: String,
    default: 'default',
    unique: true
  },
  topbar: {
    type: topbarSchema,
    required: true
  },
  logo: {
    type: String,
    required: true,
    trim: true
  }
}, {
  timestamps: true
});

// Method để lấy menu tree từ collection menuHeader
headerSchema.statics.getMenuTree = async function() {
  try {
    const Menu = require('./menuHeader');
    return await Menu.getMenuTree();
  } catch (error) {
    console.error('Error getting menu tree:', error);
    throw error;
  }
};

// Method để lấy menu tree với programmes từ collection menuHeader
headerSchema.statics.getMenuTreeWithProgrammes = async function() {
  try {
    const Menu = require('./menuHeader');
    return await Menu.getMenuTreeWithProgrammes();
  } catch (error) {
    console.error('Error getting menu tree with programmes:', error);
    throw error;
  }
};

// Method để lấy programmes theo menu ID
headerSchema.statics.getProgrammesByMenuId = async function(menuId) {
  try {
    const Menu = require('./menuHeader');
    return await Menu.getProgrammesByMenuId(menuId);
  } catch (error) {
    console.error('Error getting programmes by menu ID:', error);
    throw error;
  }
};

// Tạo migration script để import dữ liệu từ menu.json
headerSchema.statics.migrateFromJson = async function(jsonData) {
  try {
    // Kiểm tra xem đã có header mặc định chưa
    const existingHeader = await this.findOne({ name: 'default' });
    
    // Chỉ giữ lại topbar và logo, bỏ search và mainMenu
    const headerData = {
      topbar: jsonData.topbar,
      logo: jsonData.logo
    };
    
    if (existingHeader) {
      // Cập nhật header hiện có
      Object.assign(existingHeader, headerData);
      await existingHeader.save();
      console.log('Header data updated successfully');
      return existingHeader;
    } else {
      // Tạo header mới với dữ liệu từ JSON
      const newHeader = await this.create({
        name: 'default',
        ...headerData
      });
      console.log('Header data imported successfully');
      return newHeader;
    }
  } catch (error) {
    console.error('Error migrating header data:', error);
    throw error;
  }
};

module.exports = mongoose.model('Header', headerSchema); 