<?php

namespace App\Filament\Resources\DatabaseHostResource\Pages;

use App\Filament\Resources\DatabaseHostResource;
use Filament\Resources\Pages\CreateRecord;
use Filament\Forms;
use Filament\Forms\Components\Section;
use Filament\Forms\Form;

class CreateDatabaseHost extends CreateRecord
{
    protected static string $resource = DatabaseHostResource::class;

    protected ?string $heading = 'Database Hosts';

    protected static bool $canCreateAnother = false;

    protected ?string $subheading = '(database servers that can have individual databases)';

    public function form(Form $form): Form
    {
        return $form
            ->schema([
                Section::make()->schema([
                    Forms\Components\TextInput::make('host')
                        ->helperText('The IP address or Domain name that should be used when attempting to connect to this MySQL host from this Panel to create new databases.')
                        ->required()
                        ->live()
                        ->debounce(500)
                        ->afterStateUpdated(fn ($state, Forms\Set $set) => $set('name', $state))
                        ->maxLength(191),
                    Forms\Components\TextInput::make('port')
                        ->helperText('The port that MySQL is running on for this host.')
                        ->required()
                        ->numeric()
                        ->default(3306)
                        ->minValue(0)
                        ->maxValue(65535),
                    Forms\Components\TextInput::make('username')
                        ->helperText('The username of an account that has enough permissions to create new users and databases on the system.')
                        ->required()
                        ->maxLength(191),
                    Forms\Components\TextInput::make('password')
                        ->helperText('The password for the database user.')
                        ->password()
                        ->revealable()
                        ->maxLength(191)
                        ->required(),
                    Forms\Components\TextInput::make('name')
                        ->helperText('A short identifier used to distinguish this location from others. Must be between 1 and 60 characters, for example, us.nyc.lvl3.')
                        ->required()
                        ->maxLength(60),
                    Forms\Components\Select::make('node_id')
                        ->searchable()
                        ->preload()
                        ->helperText('This setting only defaults to this database host when adding a database to a server on the selected node.')
                        ->label('Linked Node')
                        ->relationship('node', 'name'),
                ])->columns([
                    'default' => 1,
                    'lg' => 2,
                ]),
            ]);

    }

    protected function mutateFormDataBeforeCreate(array $data): array
    {
        if (isset($data['password'])) {
            $data['password'] = encrypt($data['password']);
        }

        return $data;
    }

    protected function getHeaderActions(): array
    {
        return [
            $this->getCreateFormAction()->formId('form'),
        ];

    }
    protected function getFormActions(): array
    {
        return [];
    }

}