import dotenv from "dotenv";
dotenv.config({ encoding: "utf8" });

import { WordpressImportService } from "../api/services/wordpressImport.service";
import { sequelize } from "../api/config/sequelize";

const toNumber = (value: string | undefined, fallback: number): number => {
    const num = Number(value);
    return Number.isFinite(num) ? num : fallback;
};

const run = async () => {
    await sequelize.authenticate();

    const service = new WordpressImportService({
        language: process.env.DEFAULT_LANGUAGE_CODE ?? 'en',
        scope: ['admin'],
        accountId: process.env.IMPORT_ACCOUNT_ID ? Number(process.env.IMPORT_ACCOUNT_ID) : null,
        userId: process.env.IMPORT_USER_ID ? Number(process.env.IMPORT_USER_ID) : null,
        config: {
            isPremium: true,
            timeZone: process.env.DEFAULT_TIMEZONE ?? 'UTC'
        }
    });

    const chunkSize = toNumber(process.env.WP_IMPORT_CHUNK_SIZE, 50);
    let startPostId = toNumber(process.env.WP_IMPORT_START_POST_ID, 0);
    const postTypes = process.env.WP_IMPORT_POST_TYPES
        ? process.env.WP_IMPORT_POST_TYPES.split(',').map(t => t.trim()).filter(Boolean)
        : ['post'];

    const importComments = process.env.WP_IMPORT_COMMENTS !== 'false';
    const importCategories = process.env.WP_IMPORT_CATEGORIES !== 'false';
    const importTags = process.env.WP_IMPORT_TAGS !== 'false';
    const postType = process.env.WP_TARGET_POST_TYPE ?? 'post';

    while (true) {
        const result = await service.importChunk({
            chunkSize,
            startPostId,
            postTypes,
            importComments,
            importCategories,
            importTags,
            postType,
            authorId: process.env.WP_IMPORT_AUTHOR_ID ? Number(process.env.WP_IMPORT_AUTHOR_ID) : undefined,
            commentUserId: process.env.WP_IMPORT_COMMENT_USER_ID ? Number(process.env.WP_IMPORT_COMMENT_USER_ID) : undefined
        });

        console.log('[wordpress-import]', result);

        if (!result.hasMore || !result.lastPostId) {
            break;
        }

        startPostId = result.lastPostId;
    }

    process.exit(0);
};

run().catch((err) => {
    console.error('WordPress import failed:', err);
    process.exit(1);
});
