import { useState } from 'react';
import { useRouter } from 'next/router';

import { Button, Card, CardTitle, FormControl, Input } from '../../../components/v2';
import saveIntegrationAccessToken from '../../api/integrations/saveIntegrationAccessToken';

export default function FlyioCreateIntegrationPage() {
  const router = useRouter();
  const [accessToken, setAccessToken] = useState('');
  const [accessTokenErrorText, setAccessTokenErrorText] = useState('');
  const [isLoading, setIsLoading] = useState(false);

  const handleButtonClick = async () => {
    try {
      setAccessTokenErrorText('');
      if (accessToken.length === 0) {
        setAccessTokenErrorText('Access token cannot be blank');
        return;
      }

      setIsLoading(true);

      const integrationAuth = await saveIntegrationAccessToken({
        workspaceId: localStorage.getItem('projectData.id'),
        integration: 'flyio',
        accessId: null,
        accessToken
      });

      setIsLoading(false);

      router.push(`/integrations/flyio/create?integrationAuthId=${integrationAuth._id}`);
    } catch (err) {
      console.error(err);
    }
  };

  return (
    <div className="flex h-full w-full items-center justify-center">
      <Card className="max-w-md rounded-md p-8">
        <CardTitle className="text-center">Fly.io Integration</CardTitle>
        <FormControl
          label="Fly.io Access Token"
          errorText={accessTokenErrorText}
          isError={accessTokenErrorText !== '' ?? false}
        >
          <Input
            placeholder=""
            value={accessToken}
            onChange={(e) => setAccessToken(e.target.value)}
          />
        </FormControl>
        <Button
          onClick={handleButtonClick}
          color="mineshaft"
          className="mt-4"
          isLoading={isLoading}
        >
          Connect to Fly.io
        </Button>
      </Card>
    </div>
  );
}

FlyioCreateIntegrationPage.requireAuth = true;
