<?php

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schema;

test('all tables exist after migration', function () {
    expect(Schema::hasTable('users'))->toBeTrue()
        ->and(Schema::hasTable('consultations'))->toBeTrue()
        ->and(Schema::hasTable('timelines'))->toBeTrue()
        ->and(Schema::hasTable('timeline_updates'))->toBeTrue()
        ->and(Schema::hasTable('posts'))->toBeTrue()
        ->and(Schema::hasTable('working_hours'))->toBeTrue()
        ->and(Schema::hasTable('blocked_times'))->toBeTrue()
        ->and(Schema::hasTable('notifications'))->toBeTrue()
        ->and(Schema::hasTable('admin_logs'))->toBeTrue();
});

test('users table has all required columns', function () {
    expect(Schema::hasColumns('users', [
        'id',
        'user_type',
        'full_name',
        'national_id',
        'company_name',
        'company_cert_number',
        'contact_person_name',
        'contact_person_id',
        'email',
        'phone',
        'password',
        'status',
        'preferred_language',
        'email_verified_at',
        'remember_token',
        'created_at',
        'updated_at',
    ]))->toBeTrue();
});

test('consultations table has all required columns', function () {
    expect(Schema::hasColumns('consultations', [
        'id',
        'user_id',
        'booking_date',
        'booking_time',
        'problem_summary',
        'consultation_type',
        'payment_amount',
        'payment_status',
        'status',
        'admin_notes',
        'created_at',
        'updated_at',
    ]))->toBeTrue();
});

test('timelines table has all required columns', function () {
    expect(Schema::hasColumns('timelines', [
        'id',
        'user_id',
        'case_name',
        'case_reference',
        'status',
        'created_at',
        'updated_at',
    ]))->toBeTrue();
});

test('posts table has all required columns', function () {
    expect(Schema::hasColumns('posts', [
        'id',
        'title',
        'body',
        'status',
        'published_at',
        'created_at',
        'updated_at',
    ]))->toBeTrue();
});

test('migrate rollback works without errors', function () {
    $result = Artisan::call('migrate:rollback', ['--force' => true]);
    expect($result)->toBe(0);

    $result = Artisan::call('migrate', ['--force' => true]);
    expect($result)->toBe(0);
});
