<?php

namespace App\Services\LinkedIn;

/**
 * Normalises and formats LinkedIn URNs and bare IDs.
 */
class LinkedInUrn
{
    public static function account(string $id): string
    {
        return str_starts_with($id, 'urn:li:sponsoredAccount:')
            ? $id
            : 'urn:li:sponsoredAccount:'.ltrim($id, '_');
    }

    public static function campaignGroup(string $id): string
    {
        return str_starts_with($id, 'urn:li:sponsoredCampaignGroup:')
            ? $id
            : 'urn:li:sponsoredCampaignGroup:'.$id;
    }

    public static function campaign(string $id): string
    {
        return str_starts_with($id, 'urn:li:sponsoredCampaign:')
            ? $id
            : 'urn:li:sponsoredCampaign:'.$id;
    }

    public static function creative(string $id): string
    {
        return str_starts_with($id, 'urn:li:sponsoredCreative:')
            ? $id
            : 'urn:li:sponsoredCreative:'.$id;
    }

    public static function organization(string $id): string
    {
        return str_starts_with($id, 'urn:li:organization:')
            ? $id
            : 'urn:li:organization:'.$id;
    }

    /**
     * Extracts the trailing bare ID from any URN.
     */
    public static function bare(string $urn): string
    {
        if (! str_contains($urn, ':')) {
            return $urn;
        }

        $parts = explode(':', $urn);

        return (string) end($parts);
    }
}
