<?php
declare(strict_types=1);

use Migrations\BaseMigration;

class InitialOnboarding extends BaseMigration
{
    public function change(): void
    {
        $adminUsers = $this->table('admin_users');
        $adminUsers
            ->addColumn('email', 'string', [
                'limit' => 255,
                'null' => false,
            ])
            ->addColumn('password_hash', 'string', [
                'limit' => 255,
                'null' => false,
            ])
            ->addColumn('display_name', 'string', [
                'limit' => 120,
                'null' => false,
            ])
            ->addColumn('is_active', 'boolean', [
                'default' => true,
                'null' => false,
            ])
            ->addColumn('last_login_at', 'datetime', [
                'default' => null,
                'null' => true,
            ])
            ->addColumn('created', 'datetime', [
                'null' => false,
            ])
            ->addColumn('modified', 'datetime', [
                'null' => false,
            ])
            ->addIndex(['email'], ['unique' => true])
            ->create();

        $contactMessages = $this->table('contact_messages');
        $contactMessages
            ->addColumn('full_name', 'string', [
                'limit' => 150,
                'null' => false,
            ])
            ->addColumn('email', 'string', [
                'limit' => 255,
                'null' => false,
            ])
            ->addColumn('phone', 'string', [
                'limit' => 60,
                'default' => null,
                'null' => true,
            ])
            ->addColumn('interest_area', 'string', [
                'limit' => 40,
                'null' => false,
            ])
            ->addColumn('subject', 'string', [
                'limit' => 160,
                'default' => null,
                'null' => true,
            ])
            ->addColumn('message_body', 'text', [
                'null' => false,
            ])
            ->addColumn('status', 'string', [
                'limit' => 20,
                'default' => 'new',
                'null' => false,
            ])
            ->addColumn('admin_notes', 'text', [
                'default' => null,
                'null' => true,
            ])
            ->addColumn('consent_to_contact', 'boolean', [
                'default' => false,
                'null' => false,
            ])
            ->addColumn('reviewed_by_admin_user_id', 'integer', [
                'default' => null,
                'null' => true,
            ])
            ->addColumn('created', 'datetime', [
                'null' => false,
            ])
            ->addColumn('modified', 'datetime', [
                'null' => false,
            ])
            ->addForeignKey('reviewed_by_admin_user_id', 'admin_users', 'id', [
                'delete' => 'SET_NULL',
                'update' => 'NO_ACTION',
            ])
            ->addIndex(['status'])
            ->addIndex(['interest_area'])
            ->create();
    }
}
