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

import { AdminLayout } from '@/layouts/admin-layout';
import type { AppPageProps } from '@/types';

import { blankOrderItem, normalizeOrderForm, OrderForm } from './order-form';
import type {
    CustomerOption,
    OrderFormData,
    ProductOption,
    SelectOption,
} from './order-form';

type AdminOrderCreateProps = {
    statusOptions: SelectOption[];
    customerOptions: CustomerOption[];
    productOptions: ProductOption[];
};

export default function AdminOrderCreate({
    statusOptions,
    customerOptions,
    productOptions,
}: AdminOrderCreateProps) {
    const { config } = usePage<AppPageProps>().props;
    const form = useForm<OrderFormData>({
        user_id: '',
        order_number: '',
        status: 'placed',
        currency: config.default_currency,
        total_minor: '',
        customer_name: '',
        customer_email: '',
        customer_phone: '',
        address_line1: '',
        address_line2: '',
        city: '',
        postal_code: '',
        country: '',
        notes: '',
        placed_at: '',
        items: [blankOrderItem()],
    });

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

        form.transform(normalizeOrderForm);
        form.post('/admin/orders');
    };

    return (
        <AdminLayout>
            <Head title="Create Order" />

            <OrderForm
                title="Create Order"
                submitLabel="Create Order"
                backHref="/admin/orders"
                form={form}
                statusOptions={statusOptions}
                customerOptions={customerOptions}
                productOptions={productOptions}
                onSubmit={submit}
            />
        </AdminLayout>
    );
}
