'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up(queryInterface, Sequelize) {
    await queryInterface.createTable('settings', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      key: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true,
        comment: 'Kunci unik pengaturan, contoh: auto_skip_threshold_hours'
      },
      value: {
        type: Sequelize.TEXT,
        allowNull: true,
        comment: 'Nilai pengaturan (disimpan sebagai string/JSON)'
      },
      label: {
        type: Sequelize.STRING,
        allowNull: true,
        comment: 'Label yang ditampilkan di UI'
      },
      description: {
        type: Sequelize.TEXT,
        allowNull: true,
        comment: 'Deskripsi pengaturan'
      },
      type: {
        type: Sequelize.ENUM('string', 'number', 'boolean', 'json', 'password'),
        defaultValue: 'string',
        comment: 'Tipe data nilai pengaturan'
      },
      group: {
        type: Sequelize.STRING,
        allowNull: true,
        defaultValue: 'general',
        comment: 'Grup pengaturan, contoh: cron, email, general'
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });

    // Seed data default settings
    const now = new Date();
    await queryInterface.bulkInsert('settings', [
      {
        key: 'auto_skip_threshold_hours',
        value: '24',
        label: 'Batas Waktu Auto-Skip (Jam)',
        description: 'Invoice yang pending lebih dari N jam akan otomatis di-skip oleh sistem.',
        type: 'number',
        group: 'cron',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'auto_skip_enabled',
        value: 'true',
        label: 'Aktifkan Auto-Skip',
        description: 'Jika aktif, cron job akan otomatis meng-skip invoice yang sudah melewati batas waktu.',
        type: 'boolean',
        group: 'cron',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_notification_enabled',
        value: 'false',
        label: 'Aktifkan Notifikasi Email',
        description: 'Kirim email ke admin saat terjadi auto-skip invoice.',
        type: 'boolean',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_smtp_host',
        value: '',
        label: 'SMTP Host',
        description: 'Host server SMTP untuk pengiriman email.',
        type: 'string',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_smtp_port',
        value: '587',
        label: 'SMTP Port',
        description: 'Port server SMTP.',
        type: 'number',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_smtp_user',
        value: '',
        label: 'SMTP Username',
        description: 'Username akun SMTP.',
        type: 'string',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_smtp_pass',
        value: '',
        label: 'SMTP Password',
        description: 'Password akun SMTP.',
        type: 'password',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_smtp_secure',
        value: 'false',
        label: 'Gunakan SSL/TLS',
        description: 'Aktifkan jika SMTP menggunakan koneksi aman (SSL/TLS).',
        type: 'boolean',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_admin_recipient',
        value: '',
        label: 'Email Penerima Admin',
        description: 'Alamat email admin yang akan menerima notifikasi auto-skip.',
        type: 'string',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'email_from_name',
        value: 'WaBill System',
        label: 'Nama Pengirim Email',
        description: 'Nama yang akan ditampilkan sebagai pengirim email.',
        type: 'string',
        group: 'email',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'cron_batch_size',
        value: '2',
        label: 'Ukuran Batch',
        description: 'Jumlah invoice yang diproses per batch oleh cron job.',
        type: 'number',
        group: 'cron',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'cron_delay_between_batches_ms',
        value: '20000',
        label: 'Jeda Antar Batch (ms)',
        description: 'Waktu tunggu dalam milidetik antara setiap batch pengiriman.',
        type: 'number',
        group: 'cron',
        createdAt: now,
        updatedAt: now
      },
      {
        key: 'cron_delay_per_message_ms',
        value: '5000',
        label: 'Jeda Per Pesan (ms)',
        description: 'Waktu tunggu dalam milidetik antara setiap pesan dalam satu batch.',
        type: 'number',
        group: 'cron',
        createdAt: now,
        updatedAt: now
      }
    ]);
  },

  async down(queryInterface, Sequelize) {
    await queryInterface.dropTable('settings');
  }
};
