-- ========= ДАННЫЕ ОТЧЕТОВ ДЛЯ ЖИТЕЛЕЙ =========
-- Одна запись на дом + период (например: дом 12, январь 2026).
-- Все собранные данные отчета сохраняются здесь.

CREATE TABLE IF NOT EXISTS resident_report_data (
  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,
  period_month          INTEGER NOT NULL,   -- 1-12
  period_year           INTEGER NOT NULL,

  -- NPS
  nps_score             INTEGER NOT NULL DEFAULT 0,
  nps_total_responses   INTEGER NOT NULL DEFAULT 0,
  nps_avg_score         NUMERIC(4,2) DEFAULT 0,
  nps_promoters         INTEGER NOT NULL DEFAULT 0,
  nps_passives          INTEGER NOT NULL DEFAULT 0,
  nps_detractors        INTEGER NOT NULL DEFAULT 0,

  -- Заявки
  apps_total            INTEGER NOT NULL DEFAULT 0,
  apps_completed        INTEGER NOT NULL DEFAULT 0,
  apps_quality          INTEGER NOT NULL DEFAULT 0,

  -- Задачи (календарный план)
  tasks_total           INTEGER NOT NULL DEFAULT 0,
  tasks_completed       INTEGER NOT NULL DEFAULT 0,

  -- Финансы
  funds_collected       NUMERIC(14,2) NOT NULL DEFAULT 0,
  funds_spent           NUMERIC(14,2) NOT NULL DEFAULT 0,
  funds_balance         NUMERIC(14,2) NOT NULL DEFAULT 0,

  -- Долги
  debt_cases_won        INTEGER NOT NULL DEFAULT 0,
  debt_collected        NUMERIC(14,2) NOT NULL DEFAULT 0,

  -- Расходы (итог и по категориям — JSON)
  expenses_total        NUMERIC(14,2) NOT NULL DEFAULT 0,
  expenses_by_category  JSONB,

  -- Доп. данные в JSON (мероприятия, фото, план)
  events                JSONB,
  work_photos           JSONB,
  plan_items            JSONB,

  -- Полный снимок отчета (как в content) — на случай расширения
  snapshot              JSONB,

  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_resident_report_data_building ON resident_report_data(building_id);
CREATE INDEX IF NOT EXISTS idx_resident_report_data_period ON resident_report_data(period_year, period_month);

COMMENT ON TABLE resident_report_data IS 'Собранные данные отчетов для жителей: дом + период (напр. дом 12, январь)';
