| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | <?php
namespace App\Helpers;
use ArrayAccess;
use Illuminate\Support\Collection;
class Country implements ArrayAccess
{
    /**
     * The country data array.
     */
    protected array $data;
    /**
     * Create a new country instance.
     */
    public function __construct($data)
    {
        $this->setData($data);
    }
    /**
     * Set the country data array.
     */
    public function setData($data): static
    {
        if (is_array($data)) {
            $this->data = $data;
        } elseif ($data instanceof self) {
            $this->data = $data->getData();
        } else {
            $this->data = [];
        }
        return $this;
    }
    /**
     * Get the country data array.
     */
    public function getData(): ?array
    {
        return $this->data;
    }
    /**
     * Set a single country data array value.
     */
    public function set($key, $value): static
    {
        $this->data[$key] = $value;
        return $this;
    }
    /**
     * Get a single country data array value.
     */
    public function get($key): mixed
    {
        return $this->data[$key] ?? null;
    }
    /**
     * Check if an offset exists in the data array.
     */
    public function offsetExists($offset): bool
    {
        return isset($this->data[$offset]);
    }
    /**
     * Get an offset from the data array.
     */
    public function offsetGet($offset): mixed
    {
        return $this->data[$offset] ?? null;
    }
    /**
     * Set an offset in the data array.
     */
    public function offsetSet($offset, $value): void
    {
        if ($offset === null) {
            $this->data[] = $value;
        } else {
            $this->data[$offset] = $value;
        }
    }
    /**
     * Unset an offset in the data array.
     */
    public function offsetUnset($offset): void
    {
        unset($this->data[$offset]);
    }
    /**
     * Get the country id.
     */
    public function getId(): ?int
    {
        return $this->get('id');
    }
    /**
     * Get the country name.
     */
    public function getName(): ?string
    {
        return $this->get('name');
    }
    /**
     * Get the country iso2.
     */
    public function getIso2(): ?string
    {
        return $this->get('iso2');
    }
    /**
     * Get the country iso3.
     */
    public function getIso3(): ?string
    {
        return $this->get('iso3');
    }
    /**
     * Get the country numeric code.
     */
    public function getNumericCode(): ?string
    {
        return $this->get('numeric_code');
    }
    /**
     * Get the country phone code.
     */
    public function getPhoneCode(): ?string
    {
        return $this->get('phone_code');
    }
    /**
     * Get the country capital.
     */
    public function getCapital(): ?string
    {
        return $this->get('capital');
    }
    /**
     * Get the country currency code.
     */
    public function getCurrency(): ?string
    {
        return $this->get('currency');
    }
    /**
     * Get the country currency name.
     */
    public function getCurrencyName(): ?string
    {
        return $this->get('currency_name');
    }
    /**
     * Get the country currency symbol.
     */
    public function getCurrencySymbol(): ?string
    {
        return $this->get('currency_symbol');
    }
    /**
     * Get the country tld.
     */
    public function getTld(): ?string
    {
        return $this->get('tld');
    }
    /**
     * Get the country native name.
     */
    public function getNative(): ?string
    {
        return $this->get('native');
    }
    /**
     * Get the country region.
     */
    public function getRegion(): ?string
    {
        return $this->get('region');
    }
    /**
     * Get the country region id.
     */
    public function getRegionId(): ?int
    {
        return $this->get('region_id');
    }
    /**
     * Get the country subregion.
     */
    public function getSubregion(): ?string
    {
        return $this->get('subregion');
    }
    /**
     * Get the country subregion id.
     */
    public function getSubregionId(): ?int
    {
        return $this->get('subregion_id');
    }
    /**
     * Get the country nationality.
     */
    public function getNationality(): ?string
    {
        return $this->get('nationality');
    }
    /**
     * Get the country timezones.
     */
    public function getTimezones(): Collection
    {
        return collect($this->get('timezones') ?? []);
    }
    /**
     * Get the country translations.
     */
    public function getTranslations(): Collection
    {
        return collect($this->get('translations') ?? []);
    }
    /**
     * Get the country latitude.
     */
    public function getLatitude(): ?string
    {
        return $this->get('latitude');
    }
    /**
     * Get the country longitude.
     */
    public function getLongitude(): ?string
    {
        return $this->get('longitude');
    }
    /**
     * Get the country flag emoji.
     */
    public function getEmoji(): ?string
    {
        return $this->get('emoji');
    }
    /**
     * Get the country flag unicode.
     */
    public function getEmojiU(): ?string
    {
        return $this->get('emojiU');
    }
    /**
     * Get the country states.
     */
    public function getStates(): ?array
    {
        $countryCode = $this->getIso2();
        return LocationDataLoader::getAllStates($countryCode, false)->all();
    }
}
 |