'use strict';

/**
 * Contract: payload sync
 *
 * Apply schema drift dari database ke file payload (update kolom, tipe, constraint).
 * File lama di-archive sebelum overwrite (filename.json.archive.NNN).
 *
 * Inline migration v4.0.0: business logic dipindah ke
 * generators/lib/payload/payload-runner.js (dari create-payload.js).
 * Handler instantiate PayloadGenerator dan inject mode sync=true.
 */

const { PayloadGenerator } = require('../../lib/payload/payload-runner');

module.exports = {
    resource: 'payload',
    verb: 'sync',
    description: 'Apply schema drift dari database ke file payload (update kolom, tipe, constraint)',
    category: 'management',
    flags: {
        config: {
            type: 'string',
            required: false,
            default: null,
            description: 'File config database (.env). Fallback ke `.restforge/defaults.json` bila tidak disediakan eksplisit (set via `config set-default`)'
        },
        table: {
            type: 'string',
            required: false,
            default: null,
            description: 'Sync hanya satu tabel spesifik (default: semua)'
        },
        'expand-fk': {
            type: 'boolean',
            required: false,
            default: false,
            description: 'Generate konfigurasi JOIN dari foreign key: buat file SQL query/<table>-join.sql dan set datatablesQuery/viewQuery ke file tersebut. Opt-in; tanpa flag ini perilaku sync tidak berubah. Butuh --table. Bila --fk-columns tidak diisi, kolom display per FK dipilih otomatis (name/nama -> code/kode -> primary key)'
        },
        'fk-columns': {
            type: 'string',
            required: false,
            default: null,
            description: 'Opsional. Daftar kolom tabel referensi yang di-surface lewat JOIN. Setiap entri WAJIB berbentuk `table.column` (qualified), dipisah koma. Contoh: visitor_categories.category_code,visitor_categories.category_name. Bila dikosongkan, di-resolve otomatis per FK'
        }
    },
    examples: [
        'npx restforge payload sync --config=db.env',
        'npx restforge payload sync --config=db.env --table=users',
        'npx restforge payload sync --table=visitors --expand-fk',
        'npx restforge payload sync --table=visitors --expand-fk --fk-columns=visitor_categories.category_code,visitor_categories.category_name'
    ],
    async handler(args) {
        const generator = new PayloadGenerator();
        await generator.run({
            config: args.config,
            table: args.table || null,
            sync: true,
            expandFk: args['expand-fk'] === true,
            fkColumns: args['fk-columns'] || null
        });
    }
};
