<?php

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

return new class extends Migration
{
    public function up(): void
    {
        // ── Main notices table ──
        Schema::create('admin_notices', function (Blueprint $table) {
            $table->id();
            $table->foreignId('sent_by')->constrained('users')->onDelete('cascade'); // admin
            $table->enum('type', ['single', 'all']);                                 // single user / all users
            $table->string('subject');
            $table->text('message');
            $table->enum('channel', ['email', 'panel', 'both'])->default('both');
            $table->integer('total_recipients')->default(0);
            $table->integer('delivered_count')->default(0);
            $table->integer('failed_count')->default(0);
            $table->enum('status', ['pending', 'processing', 'completed', 'failed'])->default('pending');
            $table->timestamps();
        });

        // ── Per-user delivery record ──
        Schema::create('admin_notice_recipients', function (Blueprint $table) {
            $table->id();
            $table->foreignId('notice_id')->constrained('admin_notices')->onDelete('cascade');
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->enum('email_status', ['pending', 'sent', 'failed'])->default('pending');
            $table->enum('panel_status', ['unread', 'read'])->default('unread');
            $table->timestamp('read_at')->nullable();
            $table->timestamp('email_sent_at')->nullable();
            $table->timestamps();

            $table->unique(['notice_id', 'user_id']);
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('admin_notice_recipients');
        Schema::dropIfExists('admin_notices');
    }
};