using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace SolutionErp.Infrastructure.Persistence.Migrations
{
    /// <inheritdoc />
    public partial class BackfillPeQuoteIsSelectedAndWinnerInvariant : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            // [multi-NCC 2026-07-12 — anh Kiệt LOCKED A2/A6] Data-only backfill 2 CHIỀU thiết lập
            // BẤT BIẾN: PurchaseEvaluationSupplier.IsWinner == đơn vị có ÍT NHẤT 1
            // PurchaseEvaluationQuote.IsSelected. NGUỒN-SỰ-THẬT mới = Quote.IsSelected (per
            // Detail×Supplier); IsWinner (whole-supplier, Mig 58) → DERIVED. Idempotent (WHERE ...=0
            // → re-run no-op). SQL-Server-only (tests SQLite EnsureCreated KHÔNG replay migration).

            // CHIỀU 1 (IsWinner → IsSelected): phiếu cũ mô hình whole-supplier winner (Mig 58) →
            // mọi báo giá của đơn vị IsWinner=1 được đánh IsSelected=1 (đơn vị thắng cả gói → mọi
            // hạng mục của họ được chọn). Preserve tổng: winnerQuoteTotal cũ (SUM quote của IsWinner)
            // == winnerQuoteTotal mới (SUM quote IsSelected). Mirror Mig 58 idempotent.
            migrationBuilder.Sql(@"
UPDATE q SET IsSelected = 1
FROM PurchaseEvaluationQuotes q
INNER JOIN PurchaseEvaluationSuppliers s ON s.Id = q.PurchaseEvaluationSupplierId
WHERE s.IsWinner = 1 AND q.IsSelected = 0;");

            // CHIỀU 2 (IsSelected → IsWinner): dữ liệu dormant/seed có Quote.IsSelected=1 nhưng
            // supplier-row IsWinner=0 (per-hạng-mục selection chưa đồng bộ flag) → set IsWinner=1
            // cho đơn vị có tồn tại ≥1 quote IsSelected. Sau 2 chiều: IsWinner ⟺ Any(IsSelected).
            migrationBuilder.Sql(@"
UPDATE s SET IsWinner = 1
FROM PurchaseEvaluationSuppliers s
WHERE s.IsWinner = 0
  AND EXISTS (
      SELECT 1 FROM PurchaseEvaluationQuotes q
      WHERE q.PurchaseEvaluationSupplierId = s.Id AND q.IsSelected = 1);");
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            // Data-only backfill KHÔNG reversible (không snapshot trạng thái IsSelected/IsWinner
            // trước khi thiết lập bất biến; revert = phá bất biến / mất per-hạng-mục selection).
            // No-op an toàn — mirror BackfillEndedByLevelFinalizeFromChangelog (Mig 61).
        }
    }
}
