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);
