-- ========= АГРЕГИРОВАННЫЕ ПОКАЗАТЕЛИ NPS ПО ДОМУ И ПЕРИОДУ =========
-- Сохранение цифр NPS (score, кол-во ответов, промоутеры и т.д.) для отчетов

CREATE TABLE IF NOT EXISTS nps_building_stats (
  id                BIGSERIAL PRIMARY KEY,
  building_id       VARCHAR(50) NOT NULL REFERENCES buildings(id) ON DELETE CASCADE,
  period_start      DATE NOT NULL,
  period_end        DATE NOT NULL,
  total_responses   INTEGER NOT NULL DEFAULT 0,
  nps_score         INTEGER NOT NULL DEFAULT 0,          -- NPS = % промоутеров - % критиков
  avg_score         NUMERIC(4,2) NOT NULL DEFAULT 0,    -- средняя оценка 0-10
  promoters         INTEGER NOT NULL DEFAULT 0,         -- оценка 9-10
  passives          INTEGER NOT NULL DEFAULT 0,         -- оценка 7-8
  detractors        INTEGER NOT NULL DEFAULT 0,        -- оценка 0-6
  promoter_percent  NUMERIC(5,2) DEFAULT 0,
  detractor_percent NUMERIC(5,2) DEFAULT 0,
  created_at        TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at        TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  UNIQUE(building_id, period_start, period_end)
);

CREATE INDEX IF NOT EXISTS idx_nps_building_stats_building ON nps_building_stats(building_id);
CREATE INDEX IF NOT EXISTS idx_nps_building_stats_period ON nps_building_stats(period_start, period_end);

COMMENT ON TABLE nps_building_stats IS 'Агрегированные показатели NPS по дому за период (для отчетов жителям)';
