<?php

// Set the access token (You should replace this with your own access token)
$accessToken = 'xxxx-xxxx-xxxx-xxxx';

// The base URL of your Mastodon server (Replace with the base URL of your Mastodon instance)
$baseUrl = 'https://corteximplant.com';

// Function to get the list of followers
function getFollowers($baseUrl, $accessToken) {
    // First, get the account details to retrieve the account ID
    $url = "$baseUrl/api/v1/accounts/verify_credentials";
    $headers = [
        'Authorization: Bearer ' . $accessToken,
    ];

    // Initialize a cURL session and set the URL and headers
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // Execute the cURL request and get the response
    $response = curl_exec($ch);
    // Close the cURL session
    curl_close($ch);

    // Decode the JSON response to get account data
    $account = json_decode($response, true);
    $accountId = $account['id']; // Get the account ID

    // Now get the list of followers
    $url = "$baseUrl/api/v1/accounts/$accountId/followers";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    curl_close($ch);

    // Return the list of followers
    return json_decode($response, true);
}

// Function to get the list of users you are following
function getFollowing($baseUrl, $accessToken) {
    // First, get the account details to retrieve the account ID
    $url = "$baseUrl/api/v1/accounts/verify_credentials";
    $headers = [
        'Authorization: Bearer ' . $accessToken,
    ];

    // Initialize a cURL session and set the URL and headers
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // Execute the cURL request and get the response
    $response = curl_exec($ch);
    // Close the cURL session
    curl_close($ch);

    // Decode the JSON response to get account data
    $account = json_decode($response, true);
    $accountId = $account['id']; // Get the account ID

    // Now get the list of users you are following
    $url = "$baseUrl/api/v1/accounts/$accountId/following";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    curl_close($ch);

    // Return the list of users you are following
    return json_decode($response, true);
}

// Function to follow a user by user ID
function followUser($baseUrl, $accessToken, $userId) {
    $url = "$baseUrl/api/v1/accounts/$userId/follow";
    $headers = [
        'Authorization: Bearer ' . $accessToken,
    ];

    // Initialize a cURL session, set the URL, headers, and method to POST
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // Execute the cURL request and get the response
    $response = curl_exec($ch);
    // Close the cURL session
    curl_close($ch);

    // Return the response
    return json_decode($response, true);
}

// Function to unfollow a user by user ID
function unfollowUser($baseUrl, $accessToken, $userId) {
    $url = "$baseUrl/api/v1/accounts/$userId/unfollow";
    $headers = [
        'Authorization: Bearer ' . $accessToken,
    ];

    // Initialize a cURL session, set the URL, headers, and method to POST
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // Execute the cURL request and get the response
    $response = curl_exec($ch);
    // Close the cURL session
    curl_close($ch);

    // Return the response
    return json_decode($response, true);
}

// Retrieve the list of followers and users you are following
$followers = getFollowers($baseUrl, $accessToken);
$following = getFollowing($baseUrl, $accessToken);

// Create a list of follower IDs
$followerIds = array_column($followers, 'id');

// Loop through the followers list and follow each follower
foreach ($followers as $follower) {
    // Follow the user
    $followResponse = followUser($baseUrl, $accessToken, $follower['id']);
    // Output the account handle of the followed user
    echo "Following user: " . $follower['acct'] . "\n";
}

// Loop through the following list and unfollow users who are no longer following you
foreach ($following as $followedUser) {
    // If the user is not in the list of followers, unfollow them
    if (!in_array($followedUser['id'], $followerIds)) {
        $unfollowResponse = unfollowUser($baseUrl, $accessToken, $followedUser['id']);
        // Output the account handle of the unfollowed user
        echo "Unfollowing user: " . $followedUser['acct'] . "\n";
    }
}

?>