import { Head, useForm } from '@inertiajs/react';

import { AdminLayout } from '@/layouts/admin-layout';
import { ApiTokenFormView } from './create';

type AbilityOption = {
    value: string;
    label: string;
};

type ApiToken = {
    id: number;
    name: string;
    abilities: string[];
    is_active: boolean;
    expires_at: string | null;
};

type ApiTokenForm = {
    name: string;
    abilities: string[];
    is_active: boolean;
    expires_at: string;
};

type ApiTokenEditProps = {
    token: ApiToken;
    abilityOptions: AbilityOption[];
};

export default function ApiTokenEdit({
    token,
    abilityOptions,
}: ApiTokenEditProps) {
    const form = useForm<ApiTokenForm>({
        name: token.name,
        abilities: token.abilities,
        is_active: token.is_active,
        expires_at: token.expires_at || '',
    });

    const submit = (event: React.FormEvent<HTMLFormElement>) => {
        event.preventDefault();

        form.transform((data) => ({
            ...data,
            expires_at: data.expires_at === '' ? null : data.expires_at,
        }));

        form.put(`/admin/api-tokens/${token.id}`);
    };

    return (
        <AdminLayout>
            <Head title="Edit API Token" />
            <ApiTokenFormView
                title="Edit API Token"
                form={form}
                abilityOptions={abilityOptions}
                onSubmit={submit}
                submitLabel="Update Token"
            />
        </AdminLayout>
    );
}
