const mongoose = require("mongoose"); // Schema cho menu links const menuLinkSchema = new mongoose.Schema( { label: { type: String, required: true, trim: true, }, href: { type: String, required: true, trim: true, }, order: { type: Number, required: false, default: 0, }, }, { _id: false }, ); // Schema cho social links const socialLinkSchema = new mongoose.Schema( { icon: { type: String, required: true, trim: true, }, href: { type: String, required: true, trim: true, }, }, { _id: false }, ); // Schema cho phone const phoneSchema = new mongoose.Schema( { display: { type: String, required: false, trim: true, default: "", }, href: { type: String, required: false, trim: true, default: "", }, }, { _id: false }, ); // Schema cho logo const logoSchema = new mongoose.Schema( { src: { type: String, required: false, trim: true, default: "", }, alt: { type: String, required: false, trim: true, default: "", }, href: { type: String, required: false, trim: true, default: "/", }, }, { _id: false }, ); // Schema cho copyright const copyrightSchema = new mongoose.Schema( { text: { type: String, required: false, trim: true, default: "Copyright©", }, brand: { type: String, required: false, trim: true, default: "", }, rights: { type: String, required: false, trim: true, default: "All Rights Reserved.", }, }, { _id: false }, ); // Schema cho top section const topSchema = new mongoose.Schema( { bgImage: { type: String, required: false, trim: true, default: "", }, phone: { type: phoneSchema, default: () => ({ display: "", href: "" }), }, address: { type: String, required: false, trim: true, default: "", }, logo: { type: logoSchema, default: () => ({ src: "", alt: "", href: "/" }), }, menuLinks: { type: [menuLinkSchema], default: [], }, socialLinks: { type: [socialLinkSchema], default: [], }, }, { _id: false }, ); // Schema cho bottom section const bottomSchema = new mongoose.Schema( { copyright: { type: copyrightSchema, default: () => ({ text: "Copyright©", brand: "", rights: "All Rights Reserved." }), }, menuLinks: { type: [menuLinkSchema], default: [], }, }, { _id: false }, ); // Main Footer Schema - khớp 100% với footer.json const footerSchema = new mongoose.Schema( { top: { type: topSchema, default: () => ({ bgImage: "", phone: { display: "", href: "" }, address: "", logo: { src: "", alt: "", href: "/" }, menuLinks: [], socialLinks: [], }), }, bottom: { type: bottomSchema, default: () => ({ copyright: { text: "Copyright©", brand: "", rights: "All Rights Reserved." }, menuLinks: [], }), }, }, { timestamps: true, }, ); // Static method để lấy hoặc tạo footer duy nhất footerSchema.statics.getSingle = async function () { let footer = await this.findOne(); if (!footer) { footer = await this.create({}); } return footer; }; // Migration method để import từ JSON hiện tại footerSchema.statics.migrateFromJson = async function (jsonData) { try { // Xóa tất cả documents hiện có await this.deleteMany({}); // Tạo document mới const footer = await this.create(jsonData); console.log("Footer data migrated successfully"); return footer; } catch (error) { console.error("Error migrating footer data:", error); throw error; } }; module.exports = mongoose.model("Footer", footerSchema);