import { Form, Head, Link, usePage } from '@inertiajs/react';
import OnboardingController from '@/actions/App/Http/Controllers/OnboardingController';
import InputError from '@/components/input-error';
import { Button } from '@/components/ui/button';
import { Label } from '@/components/ui/label';
import { Spinner } from '@/components/ui/spinner';
import { logout } from '@/routes';
import { start } from '@/routes/onboarding/connect';

type Tenant = {
    id: string;
    name: string;
};

export default function OnboardingConnect({
    quickbooksConfigured,
    xeroConfigured,
    tenants,
}: {
    quickbooksConfigured: boolean;
    xeroConfigured: boolean;
    tenants: Tenant[];
}) {
    const errors = usePage().props.errors as Record<string, string | undefined>;

    return (
        <>
            <Head title="Connect accounting" />
            <div className="flex flex-col gap-6">
                <InputError message={errors.connection} />
                <div className="grid gap-3">
                    <Button
                        asChild
                        className="w-full"
                        disabled={!quickbooksConfigured}
                    >
                        <Link href={start('quickbooks')}>
                            Connect QuickBooks
                        </Link>
                    </Button>
                    <Button
                        asChild
                        variant="outline"
                        className="w-full"
                        disabled={!xeroConfigured}
                    >
                        <Link href={start('xero')}>Connect Xero</Link>
                    </Button>
                    <Button asChild variant="ghost" className="w-full">
                        <Link href={logout()} method="post" as="button">
                            Log out
                        </Link>
                    </Button>
                    {(!quickbooksConfigured || !xeroConfigured) && (
                        <p className="text-center text-sm text-muted-foreground">
                            A provider stays unavailable until its app
                            credentials are configured.
                        </p>
                    )}
                </div>

                {tenants.length > 0 && (
                    <Form
                        {...OnboardingController.selectTenant.form()}
                        disableWhileProcessing
                        className="grid gap-4"
                    >
                        {({ processing, errors }) => (
                            <>
                                <div className="grid gap-2">
                                    <Label htmlFor="tenant_id">
                                        Xero organisation
                                    </Label>
                                    <select
                                        id="tenant_id"
                                        name="tenant_id"
                                        required
                                        className="h-9 w-full rounded-md border border-input bg-background px-3 text-sm shadow-xs outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50"
                                    >
                                        {tenants.map((tenant) => (
                                            <option
                                                key={tenant.id}
                                                value={tenant.id}
                                            >
                                                {tenant.name}
                                            </option>
                                        ))}
                                    </select>
                                    <InputError message={errors.tenant_id} />
                                </div>
                                <Button type="submit" className="w-full">
                                    {processing && <Spinner />}
                                    Use this organisation
                                </Button>
                            </>
                        )}
                    </Form>
                )}
            </div>
        </>
    );
}

OnboardingConnect.layout = {
    title: 'Connect your books',
    description:
        'Authorize QuickBooks or Xero so your dashboard and advisor use only this company.',
};
