DROP INDEX IF EXISTS ledger_journal_entries_source_created_at_idx;
DROP INDEX IF EXISTS ledger_journal_lines_currency_created_at_idx;

DROP TABLE IF EXISTS end_of_day_balance_snapshots;
DROP TABLE IF EXISTS ledger_journal_reversals;

DROP TRIGGER IF EXISTS ledger_reversal_policies_set_updated_at ON ledger_reversal_policies;
DROP TABLE IF EXISTS ledger_reversal_policies;

DROP TRIGGER IF EXISTS currency_rounding_policies_set_updated_at ON currency_rounding_policies;
DROP TABLE IF EXISTS currency_rounding_policies;

DELETE FROM reconciliation_breaks WHERE break_type = 'provider_ledger_mismatch';

ALTER TABLE reconciliation_breaks
    DROP CONSTRAINT IF EXISTS reconciliation_breaks_break_type_check;

ALTER TABLE reconciliation_breaks
    ADD CONSTRAINT reconciliation_breaks_break_type_check
    CHECK (break_type IN (
        'journal_entry_unbalanced',
        'account_ledger_mismatch',
        'wallet_available_mismatch',
        'wallet_reserved_mismatch',
        'provider_account_mismatch',
        'provider_snapshot_orphan'
    ));

UPDATE reconciliation_runs
SET run_type = 'scheduled'
WHERE run_type = 'daily';

ALTER TABLE reconciliation_runs
    DROP CONSTRAINT IF EXISTS reconciliation_runs_run_type_check;

ALTER TABLE reconciliation_runs
    ADD CONSTRAINT reconciliation_runs_run_type_check
    CHECK (run_type IN ('manual', 'scheduled', 'provider_snapshot'));
