<?php

/**
 * 文件功能：将 position_authority_logs.user_position_id 改为可空
 *
 * 原字段为 NOT NULL，但超级管理员（id=1）无职务记录，
 * 发放奖励时 user_position_id 为 null，导致约束违反错误。
 * 修改为 nullable 后，超管操作写 null，普通职务人员写实际职务 ID。
 *
 * @author  ChatRoom Laravel
 *
 * @version 1.0.0
 */

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * 将 user_position_id 改为可空，兼容超级管理员无职务的情况
     */
    public function up(): void
    {
        Schema::table('position_authority_logs', function (Blueprint $table) {
            // 先删除原外键约束，再重新定义为 nullable
            $table->dropForeign(['user_position_id']);

            $table->unsignedBigInteger('user_position_id')
                ->nullable()
                ->change();

            $table->foreign('user_position_id')
                ->references('id')
                ->on('user_positions')
                ->nullOnDelete();
        });
    }

    /**
     * 回滚：恢复为 NOT NULL（需确保数据中无 null 值）
     */
    public function down(): void
    {
        Schema::table('position_authority_logs', function (Blueprint $table) {
            $table->dropForeign(['user_position_id']);

            $table->unsignedBigInteger('user_position_id')
                ->nullable(false)
                ->change();

            $table->foreign('user_position_id')
                ->references('id')
                ->on('user_positions')
                ->cascadeOnDelete();
        });
    }
};
