import { QueryInterface, DataTypes } from 'sequelize';

/**
 * Helper function to check if a column exists in a table
 */
async function columnExists(
    queryInterface: QueryInterface,
    tableName: string,
    columnName: string
): Promise<boolean> {
    try {
        const tableDescription = await queryInterface.describeTable(tableName);
        return columnName in tableDescription;
    } catch (error) {
        return false;
    }
}

export async function up(queryInterface: QueryInterface): Promise<void> {
    const tables = ['dealer_proposal_cost_items', 'dealer_completion_expenses'];

    const newColumns = {
        quantity: { type: DataTypes.INTEGER, allowNull: true, defaultValue: 1 },
        hsn_code: { type: DataTypes.STRING(20), allowNull: true }
    };

    for (const table of tables) {
        for (const [colName, colSpec] of Object.entries(newColumns)) {
            if (!(await columnExists(queryInterface, table, colName))) {
                await queryInterface.addColumn(table, colName, colSpec);
                console.log(`Added column ${colName} to ${table}`);
            } else {
                console.log(`Column ${colName} already exists in ${table}`);
            }
        }
    }
}

export async function down(queryInterface: QueryInterface): Promise<void> {
    const tables = ['dealer_proposal_cost_items', 'dealer_completion_expenses'];
    const columns = ['quantity', 'hsn_code'];

    for (const table of tables) {
        for (const col of columns) {
            await queryInterface.removeColumn(table, col).catch((err) => {
                console.warn(`Failed to remove column ${col} from ${table}:`, err.message);
            });
        }
    }
}
