import React, { useEffect, useMemo } from "react";
import { makeRedirectUri, useAuthRequest } from "expo-auth-session";
import { Button } from "tamagui";
import { useOAuthCallback } from "../hooks";
import { useServerConfig } from "@/hooks/useServerConfig";
import { scheme } from "@/app.json";

const LoginGithubButton = () => {
  const { data: clientId } = useServerConfig("github_client_id");
  const discovery = useMemo(() => {
    return {
      authorizationEndpoint: "https://github.com/login/oauth/authorize",
      tokenEndpoint: "https://github.com/login/oauth/access_token",
      revocationEndpoint: `https://github.com/settings/connections/applications/${clientId}`,
    };
  }, [clientId]);
  const oauth = useOAuthCallback("github");

  const [request, response, promptAsync] = useAuthRequest(
    {
      clientId: clientId,
      scopes: ["identity"],
      redirectUri: makeRedirectUri({ scheme, path: "auth/login" }),
    },
    discovery
  );

  useEffect(() => {
    if (response?.type === "success") {
      const { code } = response.params;
      oauth.mutate({ code });
    }
  }, [response]);

  return (
    <Button disabled={!request} onPress={() => promptAsync()}>
      Login with Github
    </Button>
  );
};

export default LoginGithubButton;