<?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
    {
        Schema::create('barobill_monthly_summaries', function (Blueprint $table) {
            $table->id();
            $table->foreignId('member_id')->comment('바로빌 회원사 ID');
            $table->string('billing_month', 7)->comment('과금 월 (YYYY-MM)');

            // 월정액 항목별
            $table->unsignedInteger('bank_account_fee')->default(0)->comment('계좌조회 월정액');
            $table->unsignedInteger('card_fee')->default(0)->comment('카드내역 월정액');
            $table->unsignedInteger('hometax_fee')->default(0)->comment('홈텍스 월정액');
            $table->unsignedInteger('subscription_total')->default(0)->comment('월정액 합계');

            // 건별 사용량
            $table->unsignedInteger('tax_invoice_count')->default(0)->comment('세금계산서 발행 건수');
            $table->unsignedInteger('tax_invoice_amount')->default(0)->comment('세금계산서 과금액');
            $table->unsignedInteger('usage_total')->default(0)->comment('건별 사용 합계');

            // 총합계
            $table->unsignedInteger('grand_total')->default(0)->comment('총합계');

            $table->timestamps();

            // 인덱스
            $table->unique(['member_id', 'billing_month']);
            $table->index('billing_month');

            // 외래키
            $table->foreign('member_id')
                  ->references('id')
                  ->on('barobill_members')
                  ->onDelete('cascade');
        });
    }

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