/**
 * Pricing variant prices and append-only price history.
 */

/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
export const up = (pgm) => {
  pgm.sql(`
    CREATE TABLE pricing_variant_prices (
      variant_id uuid PRIMARY KEY,
      net_unit_amount_cents integer NOT NULL,
      vat_rate text NOT NULL,
      currency text NOT NULL DEFAULT 'EUR',
      created_at timestamptz NOT NULL DEFAULT now(),
      updated_at timestamptz NOT NULL DEFAULT now(),
      CONSTRAINT pricing_variant_prices_amount_non_negative CHECK (net_unit_amount_cents >= 0),
      CONSTRAINT pricing_variant_prices_vat_rate_check CHECK (vat_rate IN ('general', 'reduced')),
      CONSTRAINT pricing_variant_prices_currency_check CHECK (currency = 'EUR')
    )
  `);

  pgm.sql(`
    CREATE TABLE pricing_price_history (
      id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
      variant_id uuid NOT NULL,
      previous_net_unit_amount_cents integer,
      previous_vat_rate text,
      previous_currency text,
      new_net_unit_amount_cents integer NOT NULL,
      new_vat_rate text NOT NULL,
      new_currency text NOT NULL DEFAULT 'EUR',
      created_at timestamptz NOT NULL DEFAULT now(),
      CONSTRAINT pricing_price_history_previous_amount_non_negative
        CHECK (previous_net_unit_amount_cents IS NULL OR previous_net_unit_amount_cents >= 0),
      CONSTRAINT pricing_price_history_new_amount_non_negative CHECK (new_net_unit_amount_cents >= 0),
      CONSTRAINT pricing_price_history_previous_vat_rate_check
        CHECK (previous_vat_rate IS NULL OR previous_vat_rate IN ('general', 'reduced')),
      CONSTRAINT pricing_price_history_new_vat_rate_check CHECK (new_vat_rate IN ('general', 'reduced')),
      CONSTRAINT pricing_price_history_previous_currency_check
        CHECK (previous_currency IS NULL OR previous_currency = 'EUR'),
      CONSTRAINT pricing_price_history_new_currency_check CHECK (new_currency = 'EUR')
    )
  `);
  pgm.sql(
    'CREATE INDEX pricing_price_history_variant_id_idx ON pricing_price_history (variant_id)',
  );
};

/** @param {import('node-pg-migrate').MigrationBuilder} pgm */
export const down = (pgm) => {
  pgm.sql('DROP TABLE IF EXISTS pricing_price_history');
  pgm.sql('DROP TABLE IF EXISTS pricing_variant_prices');
};
