using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace SolutionErp.Infrastructure.Persistence.Migrations
{
    /// <inheritdoc />
    public partial class AddMaHangMucToContractSigningPlanLines : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "MaHangMuc",
                table: "ContractSigningPlanLines",
                type: "nvarchar(20)",
                maxLength: 20,
                nullable: true);

            // [S177] BACKFILL dòng phiếu ĐÃ CÓ: chép `Code` của hạng mục đang trỏ tới.
            // 🔴 Tên bảng đã đối chiếu với `ToTable(...)` của CẢ HAI configuration trước khi
            //    viết — Mig 60 từng backfill soi NHẦM BẢNG, chạy sạch, không ném lỗi, phải đẻ
            //    Mig 61 vá (gotcha #78/#79). UPDATE sai bảng chỉ đụng 0 dòng rồi báo thành công.
            // 🔴 CỐ Ý KHÔNG lọc `c.IsDeleted = 0`: hạng mục bị xoá mềm SAU ngày lập phiếu thì
            //    dòng phiếu vẫn phải giữ được mã của nó — đó chính là lý do cột này là denorm.
            //    Lọc đi là tự tay bỏ trống đúng những dòng cần cứu nhất.
            // 🔴 Idempotent nhờ `MaHangMuc IS NULL`: chạy lại không đè dòng đã có mã.
            migrationBuilder.Sql(@"
UPDATE l
SET    l.MaHangMuc = c.Code
FROM   ContractSigningPlanLines l
       INNER JOIN ContractCatalogEntries c ON c.Id = l.CatalogEntryId
WHERE  l.MaHangMuc IS NULL
  AND  l.CatalogEntryId IS NOT NULL;");
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "MaHangMuc",
                table: "ContractSigningPlanLines");
        }
    }
}
