using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using foodmarket.Infrastructure.Persistence;

#nullable disable

namespace foodmarket.Infrastructure.Persistence.Migrations
{
    /// <summary>Phase5f — выкидываем рудиментные колонки Kind из stores и
    /// counterparties.
    ///
    /// История: ранние черновики домена различали тип объекта через целочисленное
    /// поле Kind. Позже модель упростили — для Store отдельной сущностью стал
    /// RetailPoint; для Counterparty — отдельный enum CounterpartyType (поле
    /// Type, а не Kind). Свойства Kind ушли из domain и configurations, но
    /// миграции Phase1Catalog продолжали создавать колонки как NOT NULL integer
    /// без default'а.
    ///
    /// Симптом: при любом INSERT в stores или counterparties (seeder,
    /// signup-bootstrap, контроллер) Postgres падает 23502 «null value in
    /// column "Kind"». На чистой dev-БД невозможно зарегистрировать организацию
    /// и создать ни одного контрагента.
    ///
    /// Фикс: дропаем колонки идемпотентно (стейдж уже мог быть руками
    /// почищен).</summary>
    [DbContext(typeof(AppDbContext))]
    [Migration("20260523120000_Phase5f_DropStoreKindRudiment")]
    public partial class Phase5f_DropStoreKindRudiment : Migration
    {
        protected override void Up(MigrationBuilder b)
        {
            b.Sql(@"
                DO $$
                BEGIN
                    IF EXISTS (SELECT 1 FROM information_schema.columns
                               WHERE table_schema='public' AND table_name='stores'
                               AND column_name='Kind') THEN
                        ALTER TABLE public.stores DROP COLUMN ""Kind"";
                    END IF;
                    IF EXISTS (SELECT 1 FROM information_schema.columns
                               WHERE table_schema='public' AND table_name='counterparties'
                               AND column_name='Kind') THEN
                        ALTER TABLE public.counterparties DROP COLUMN ""Kind"";
                    END IF;
                END $$;");
        }

        protected override void Down(MigrationBuilder b)
        {
            b.Sql(@"
                DO $$
                BEGIN
                    IF NOT EXISTS (SELECT 1 FROM information_schema.columns
                                   WHERE table_schema='public' AND table_name='stores'
                                   AND column_name='Kind') THEN
                        ALTER TABLE public.stores
                            ADD COLUMN ""Kind"" integer NOT NULL DEFAULT 0;
                    END IF;
                    IF NOT EXISTS (SELECT 1 FROM information_schema.columns
                                   WHERE table_schema='public' AND table_name='counterparties'
                                   AND column_name='Kind') THEN
                        ALTER TABLE public.counterparties
                            ADD COLUMN ""Kind"" integer NOT NULL DEFAULT 0;
                    END IF;
                END $$;");
        }
    }
}
