using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace TeleWave.Infrastructure.Migrations
{
    /// <summary>
    /// Переход возрастной категории на шкалу, упорядоченную по возрастанию строгости:
    /// Kids(0) → Family(1) → Teen(2) → General(3) → Adult(4). Прежние значения (General=0, Kids=1,
    /// Adult=2) отсортированы не были, а правила планировщика формулируются как «не строже X»,
    /// поэтому порядок стал значимым.
    /// </summary>
    public partial class ShowAudienceScale : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            // Одним CASE, а не серией UPDATE: последовательные обновления перепутали бы категории
            // между собой (сначала General 0 → 3, а следом это же значение попало бы под правило
            // для старого Adult).
            migrationBuilder.Sql(
                """
                UPDATE "Shows" SET "Audience" = CASE "Audience"
                    WHEN 0 THEN 3
                    WHEN 1 THEN 0
                    WHEN 2 THEN 4
                    ELSE "Audience"
                END;
                """
            );

            // Дефолт остался от первого добавления столбца и теперь означал бы «детское».
            // В модели значения по умолчанию нет — снимаем и в схеме.
            migrationBuilder.Sql("""ALTER TABLE "Shows" ALTER COLUMN "Audience" DROP DEFAULT;""");
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            // Family и Teen в старой шкале не существуют — схлопываются в General.
            migrationBuilder.Sql(
                """
                UPDATE "Shows" SET "Audience" = CASE "Audience"
                    WHEN 0 THEN 1
                    WHEN 4 THEN 2
                    ELSE 0
                END;
                """
            );

            migrationBuilder.Sql("""ALTER TABLE "Shows" ALTER COLUMN "Audience" SET DEFAULT 0;""");
        }
    }
}
