using System;
using Microsoft.EntityFrameworkCore.Migrations;

#nullable disable

namespace TakeoutSaaS.Infrastructure.Migrations
{
    /// <inheritdoc />
    public partial class UpdateTenantBillingSchema : Migration
    {
        /// <inheritdoc />
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "RefundReason",
                table: "tenant_payments",
                type: "character varying(512)",
                maxLength: 512,
                nullable: true,
                comment: "退款原因。");

            migrationBuilder.AddColumn<DateTime>(
                name: "RefundedAt",
                table: "tenant_payments",
                type: "timestamp with time zone",
                nullable: true,
                comment: "退款时间。");

            migrationBuilder.AddColumn<DateTime>(
                name: "VerifiedAt",
                table: "tenant_payments",
                type: "timestamp with time zone",
                nullable: true,
                comment: "审核时间。");

            migrationBuilder.AddColumn<long>(
                name: "VerifiedBy",
                table: "tenant_payments",
                type: "bigint",
                nullable: true,
                comment: "审核人 ID（管理员）。");

            migrationBuilder.AlterColumn<decimal>(
                name: "AmountDue",
                table: "tenant_billing_statements",
                type: "numeric(18,2)",
                precision: 18,
                scale: 2,
                nullable: false,
                comment: "应付金额（原始金额）。",
                oldClrType: typeof(decimal),
                oldType: "numeric(18,2)",
                oldPrecision: 18,
                oldScale: 2,
                oldComment: "应付金额。");

            migrationBuilder.AddColumn<int>(
                name: "BillingType",
                table: "tenant_billing_statements",
                type: "integer",
                nullable: false,
                defaultValue: 0,
                comment: "账单类型（订阅账单/配额包账单/手动账单/续费账单）。");

            migrationBuilder.AddColumn<string>(
                name: "Currency",
                table: "tenant_billing_statements",
                type: "character varying(8)",
                maxLength: 8,
                nullable: false,
                defaultValue: "CNY",
                comment: "货币类型（默认 CNY）。");

            migrationBuilder.AddColumn<decimal>(
                name: "DiscountAmount",
                table: "tenant_billing_statements",
                type: "numeric(18,2)",
                precision: 18,
                scale: 2,
                nullable: false,
                defaultValue: 0m,
                comment: "折扣金额。");

            migrationBuilder.AddColumn<string>(
                name: "Notes",
                table: "tenant_billing_statements",
                type: "character varying(512)",
                maxLength: 512,
                nullable: true,
                comment: "备注信息（如：人工备注、取消原因等）。");

            migrationBuilder.AddColumn<DateTime>(
                name: "OverdueNotifiedAt",
                table: "tenant_billing_statements",
                type: "timestamp with time zone",
                nullable: true,
                comment: "逾期通知时间。");

            migrationBuilder.AddColumn<DateTime>(
                name: "ReminderSentAt",
                table: "tenant_billing_statements",
                type: "timestamp with time zone",
                nullable: true,
                comment: "提醒发送时间（续费提醒、逾期提醒等）。");

            migrationBuilder.AddColumn<long>(
                name: "SubscriptionId",
                table: "tenant_billing_statements",
                type: "bigint",
                nullable: true,
                comment: "关联的订阅 ID（仅当 BillingType 为 Subscription 或 Renewal 时有值）。");

            migrationBuilder.AddColumn<decimal>(
                name: "TaxAmount",
                table: "tenant_billing_statements",
                type: "numeric(18,2)",
                precision: 18,
                scale: 2,
                nullable: false,
                defaultValue: 0m,
                comment: "税费金额。");

            migrationBuilder.CreateIndex(
                name: "idx_payment_billing_paidat",
                table: "tenant_payments",
                columns: new[] { "BillingStatementId", "PaidAt" });

            migrationBuilder.CreateIndex(
                name: "idx_payment_transaction_no",
                table: "tenant_payments",
                column: "TransactionNo",
                filter: "\"TransactionNo\" IS NOT NULL");

            migrationBuilder.CreateIndex(
                name: "idx_billing_created_at",
                table: "tenant_billing_statements",
                column: "CreatedAt");

            migrationBuilder.CreateIndex(
                name: "idx_billing_status_duedate",
                table: "tenant_billing_statements",
                columns: new[] { "Status", "DueDate" },
                filter: "\"Status\" IN (0, 2)");

            migrationBuilder.CreateIndex(
                name: "idx_billing_tenant_status_duedate",
                table: "tenant_billing_statements",
                columns: new[] { "TenantId", "Status", "DueDate" });
        }

        /// <inheritdoc />
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropIndex(
                name: "idx_payment_billing_paidat",
                table: "tenant_payments");

            migrationBuilder.DropIndex(
                name: "idx_payment_transaction_no",
                table: "tenant_payments");

            migrationBuilder.DropIndex(
                name: "idx_billing_created_at",
                table: "tenant_billing_statements");

            migrationBuilder.DropIndex(
                name: "idx_billing_status_duedate",
                table: "tenant_billing_statements");

            migrationBuilder.DropIndex(
                name: "idx_billing_tenant_status_duedate",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "RefundReason",
                table: "tenant_payments");

            migrationBuilder.DropColumn(
                name: "RefundedAt",
                table: "tenant_payments");

            migrationBuilder.DropColumn(
                name: "VerifiedAt",
                table: "tenant_payments");

            migrationBuilder.DropColumn(
                name: "VerifiedBy",
                table: "tenant_payments");

            migrationBuilder.DropColumn(
                name: "BillingType",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "Currency",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "DiscountAmount",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "Notes",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "OverdueNotifiedAt",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "ReminderSentAt",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "SubscriptionId",
                table: "tenant_billing_statements");

            migrationBuilder.DropColumn(
                name: "TaxAmount",
                table: "tenant_billing_statements");

            migrationBuilder.AlterColumn<decimal>(
                name: "AmountDue",
                table: "tenant_billing_statements",
                type: "numeric(18,2)",
                precision: 18,
                scale: 2,
                nullable: false,
                comment: "应付金额。",
                oldClrType: typeof(decimal),
                oldType: "numeric(18,2)",
                oldPrecision: 18,
                oldScale: 2,
                oldComment: "应付金额（原始金额）。");
        }
    }
}
