import type React from 'react';

interface Sdk {
  name: string;
  language: string;
  badge: string;
  installCmd: string;
  codeExample: string;
  repoUrl: string;
}

const sdks: Sdk[] = [
  {
    name: 'Node.js SDK',
    language: 'typescript',
    badge: 'TypeScript',
    installCmd: 'npm install @sentryagent/idp-sdk',
    codeExample: `import { AgentIdPClient } from '@sentryagent/idp-sdk';

const client = new AgentIdPClient({
  apiUrl: process.env.AGENTIDP_URL!,
  clientId: process.env.AGENTIDP_CLIENT_ID!,
  clientSecret: process.env.AGENTIDP_CLIENT_SECRET!,
});

// Register a new agent
const agent = await client.agents.register({
  name: 'my-ai-agent',
  description: 'Production summarisation agent',
});

console.log('Agent ID:', agent.agentId);

// Issue an access token
const { accessToken } = await client.tokens.issue(agent.agentId);
console.log('Token:', accessToken);`,
    repoUrl: 'https://github.com/sentryagent/sdk-node',
  },
  {
    name: 'Python SDK',
    language: 'python',
    badge: 'Python',
    installCmd: 'pip install sentryagent-idp',
    codeExample: `from sentryagent_idp import AgentIdPClient

client = AgentIdPClient(
    api_url=os.environ["AGENTIDP_URL"],
    client_id=os.environ["AGENTIDP_CLIENT_ID"],
    client_secret=os.environ["AGENTIDP_CLIENT_SECRET"],
)

# Register a new agent
agent = client.agents.register(
    name="my-ai-agent",
    description="Production summarisation agent",
)

print("Agent ID:", agent.agent_id)

# Issue an access token
token_response = client.tokens.issue(agent.agent_id)
print("Token:", token_response.access_token)`,
    repoUrl: 'https://github.com/sentryagent/sdk-python',
  },
  {
    name: 'Go SDK',
    language: 'go',
    badge: 'Go',
    installCmd: 'go get github.com/sentryagent/idp-sdk-go',
    codeExample: `import (
    "fmt"
    "os"
    idp "github.com/sentryagent/idp-sdk-go"
)

client := idp.NewClient(idp.Config{
    APIURL:       os.Getenv("AGENTIDP_URL"),
    ClientID:     os.Getenv("AGENTIDP_CLIENT_ID"),
    ClientSecret: os.Getenv("AGENTIDP_CLIENT_SECRET"),
})

// Register a new agent
agent, err := client.Agents.Register(ctx, &idp.RegisterAgentInput{
    Name:        "my-ai-agent",
    Description: "Production summarisation agent",
})
if err != nil {
    panic(err)
}
fmt.Println("Agent ID:", agent.AgentID)

// Issue an access token
token, err := client.Tokens.Issue(ctx, agent.AgentID)
fmt.Println("Token:", token.AccessToken)`,
    repoUrl: 'https://github.com/sentryagent/sdk-go',
  },
  {
    name: 'Java SDK',
    language: 'java',
    badge: 'Java',
    installCmd: `<dependency>
  <groupId>ai.sentryagent</groupId>
  <artifactId>idp-sdk</artifactId>
  <version>1.0.0</version>
</dependency>`,
    codeExample: `import ai.sentryagent.idp.AgentIdPClient;
import ai.sentryagent.idp.model.Agent;
import ai.sentryagent.idp.model.TokenResponse;

AgentIdPClient client = AgentIdPClient.builder()
    .apiUrl(System.getenv("AGENTIDP_URL"))
    .clientId(System.getenv("AGENTIDP_CLIENT_ID"))
    .clientSecret(System.getenv("AGENTIDP_CLIENT_SECRET"))
    .build();

// Register a new agent
Agent agent = client.agents().register(
    RegisterAgentRequest.builder()
        .name("my-ai-agent")
        .description("Production summarisation agent")
        .build()
);
System.out.println("Agent ID: " + agent.getAgentId());

// Issue an access token
TokenResponse token = client.tokens().issue(agent.getAgentId());
System.out.println("Token: " + token.getAccessToken());`,
    repoUrl: 'https://github.com/sentryagent/sdk-java',
  },
];

export default function SdksPage(): React.ReactElement {
  return (
    <div className="px-6 py-20">
      <div className="mx-auto max-w-5xl">
        <div className="mb-12 text-center">
          <h1 className="mb-4 text-4xl font-extrabold text-slate-900">
            Official SDKs
          </h1>
          <p className="text-xl text-slate-600">
            Native libraries for your language of choice. Every SDK is
            type-safe, fully tested, and maintained by the SentryAgent team.
          </p>
        </div>

        <div className="space-y-10">
          {sdks.map((sdk) => (
            <div
              key={sdk.name}
              className="rounded-2xl border border-slate-200 bg-white p-8 shadow-sm"
            >
              <div className="mb-6 flex items-center justify-between">
                <div className="flex items-center gap-3">
                  <h2 className="text-2xl font-bold text-slate-900">
                    {sdk.name}
                  </h2>
                  <span className="rounded-full bg-brand-100 px-3 py-0.5 text-sm font-semibold text-brand-700">
                    {sdk.badge}
                  </span>
                </div>
                <a
                  href={sdk.repoUrl}
                  target="_blank"
                  rel="noopener noreferrer"
                  className="text-sm font-medium text-brand-600 hover:underline"
                >
                  View on GitHub &rarr;
                </a>
              </div>

              <div className="mb-6">
                <p className="mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500">
                  Installation
                </p>
                <pre className="overflow-x-auto rounded-lg bg-slate-900 px-4 py-3 text-sm text-slate-100">
                  <code>{sdk.installCmd}</code>
                </pre>
              </div>

              <div>
                <p className="mb-2 text-sm font-semibold uppercase tracking-wider text-slate-500">
                  Quick Start
                </p>
                <pre className="overflow-x-auto rounded-lg bg-slate-900 px-4 py-4 text-sm leading-relaxed text-slate-100">
                  <code>{sdk.codeExample}</code>
                </pre>
              </div>
            </div>
          ))}
        </div>
      </div>
    </div>
  );
}
