-- ============================================================================
-- OrbiQuant IA - Trading Platform
-- Schema: investment
-- File: tables/09-distribution_runs.sql
-- Description: Distribution job execution logs and summaries
-- ============================================================================

CREATE TABLE investment.distribution_runs (
  -- Primary Key
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),

  -- Run Information
  run_date DATE NOT NULL UNIQUE,

  -- Statistics
  total_accounts INTEGER NOT NULL DEFAULT 0,
  successful_count INTEGER NOT NULL DEFAULT 0,
  failed_count INTEGER NOT NULL DEFAULT 0,

  -- Financial Totals
  total_gross_amount DECIMAL(18,2) NOT NULL DEFAULT 0,
  total_fee_amount DECIMAL(18,2) NOT NULL DEFAULT 0,
  total_net_amount DECIMAL(18,2) NOT NULL DEFAULT 0,

  -- Timing
  started_at TIMESTAMPTZ NOT NULL,
  completed_at TIMESTAMPTZ,
  duration_ms INTEGER,

  -- Error Tracking
  error_details JSONB,

  -- Audit
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),

  -- Constraints
  CONSTRAINT valid_counts CHECK (
    successful_count >= 0 AND
    failed_count >= 0 AND
    total_accounts = successful_count + failed_count
  ),
  CONSTRAINT valid_duration CHECK (duration_ms IS NULL OR duration_ms >= 0)
);

-- Indexes for Performance
CREATE INDEX idx_distribution_runs_date ON investment.distribution_runs(run_date DESC);
CREATE INDEX idx_distribution_runs_started ON investment.distribution_runs(started_at DESC);

-- Table Comments
COMMENT ON TABLE investment.distribution_runs IS 'Distribution job execution logs and performance metrics';

-- Column Comments
COMMENT ON COLUMN investment.distribution_runs.id IS 'Unique identifier for the run record';
COMMENT ON COLUMN investment.distribution_runs.run_date IS 'Date of the distribution run';
COMMENT ON COLUMN investment.distribution_runs.total_accounts IS 'Total accounts processed';
COMMENT ON COLUMN investment.distribution_runs.successful_count IS 'Number of successful distributions';
COMMENT ON COLUMN investment.distribution_runs.failed_count IS 'Number of failed distributions';
COMMENT ON COLUMN investment.distribution_runs.total_gross_amount IS 'Sum of all gross returns';
COMMENT ON COLUMN investment.distribution_runs.total_fee_amount IS 'Sum of all performance fees';
COMMENT ON COLUMN investment.distribution_runs.total_net_amount IS 'Sum of all net distributions';
COMMENT ON COLUMN investment.distribution_runs.started_at IS 'Timestamp when run started';
COMMENT ON COLUMN investment.distribution_runs.completed_at IS 'Timestamp when run completed';
COMMENT ON COLUMN investment.distribution_runs.duration_ms IS 'Run duration in milliseconds';
COMMENT ON COLUMN investment.distribution_runs.error_details IS 'Error information as JSON if failures occurred';
COMMENT ON COLUMN investment.distribution_runs.created_at IS 'Timestamp when record was created';
