<?php

declare(strict_types=1);

namespace Gls\GlsPoland\AdePlus\ParcelShop;

final class CParcelShop2 implements \JsonSerializable
{
    /**
     * @var string
     */
    private $id;

    /**
     * @var string
     */
    private $name1;

    /**
     * @var string
     */
    private $name2;

    /**
     * @var string
     */
    private $name3;

    /**
     * @var string
     */
    private $country;

    /**
     * @var string
     */
    private $zipcode;

    /**
     * @var string
     */
    private $city;

    /**
     * @var string
     */
    private $street;

    /**
     * @var string
     */
    private $phone;

    /**
     * @var string
     */
    private $email;

    /**
     * @var float
     */
    private $gps_lati;

    /**
     * @var float
     */
    private $gps_long;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2OpeningHoursArray
     */
    private $opening;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2HolidaysArray
     */
    private $holidays;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2PaymentsArray
     */
    private $payments;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2GroupsArray
     */
    private $groups;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2ServicesArray
     */
    private $services;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2ValidsArray
     */
    private $validity;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2DescArray
     */
    private $desc;

    /**
     * @var \Gls\GlsPoland\AdePlus\ParcelShop\CParcelShop2InfoArray
     */
    private $info;

    public function getId(): string
    {
        return $this->id;
    }

    public function withId(string $id): CParcelShop2
    {
        $new = clone $this;
        $new->id = $id;

        return $new;
    }

    public function getName1(): string
    {
        return $this->name1;
    }

    public function withName1(string $name1): CParcelShop2
    {
        $new = clone $this;
        $new->name1 = $name1;

        return $new;
    }

    public function getName2(): string
    {
        return $this->name2;
    }

    public function withName2(string $name2): CParcelShop2
    {
        $new = clone $this;
        $new->name2 = $name2;

        return $new;
    }

    public function getName3(): string
    {
        return $this->name3;
    }

    public function withName3(string $name3): CParcelShop2
    {
        $new = clone $this;
        $new->name3 = $name3;

        return $new;
    }

    public function getCountry(): string
    {
        return $this->country;
    }

    public function withCountry(string $country): CParcelShop2
    {
        $new = clone $this;
        $new->country = $country;

        return $new;
    }

    public function getZipcode(): string
    {
        return $this->zipcode;
    }

    public function withZipcode(string $zipcode): CParcelShop2
    {
        $new = clone $this;
        $new->zipcode = $zipcode;

        return $new;
    }

    public function getCity(): string
    {
        return $this->city;
    }

    public function withCity(string $city): CParcelShop2
    {
        $new = clone $this;
        $new->city = $city;

        return $new;
    }

    public function getStreet(): string
    {
        return $this->street;
    }

    public function withStreet(string $street): CParcelShop2
    {
        $new = clone $this;
        $new->street = $street;

        return $new;
    }

    public function getPhone(): string
    {
        return $this->phone;
    }

    public function withPhone(string $phone): CParcelShop2
    {
        $new = clone $this;
        $new->phone = $phone;

        return $new;
    }

    public function getEmail(): string
    {
        return $this->email;
    }

    public function withEmail(string $email): CParcelShop2
    {
        $new = clone $this;
        $new->email = $email;

        return $new;
    }

    public function getGps_lati(): float
    {
        return $this->gps_lati;
    }

    public function withGps_lati(float $gps_lati): CParcelShop2
    {
        $new = clone $this;
        $new->gps_lati = $gps_lati;

        return $new;
    }

    public function getGps_long(): float
    {
        return $this->gps_long;
    }

    public function withGps_long(float $gps_long): CParcelShop2
    {
        $new = clone $this;
        $new->gps_long = $gps_long;

        return $new;
    }

    public function getOpening(): CParcelShop2OpeningHoursArray
    {
        return $this->opening;
    }

    public function withOpening(CParcelShop2OpeningHoursArray $opening): CParcelShop2
    {
        $new = clone $this;
        $new->opening = $opening;

        return $new;
    }

    public function getHolidays(): CParcelShop2HolidaysArray
    {
        return $this->holidays;
    }

    public function withHolidays(CParcelShop2HolidaysArray $holidays): CParcelShop2
    {
        $new = clone $this;
        $new->holidays = $holidays;

        return $new;
    }

    public function getPayments(): CParcelShop2PaymentsArray
    {
        return $this->payments;
    }

    public function withPayments(CParcelShop2PaymentsArray $payments): CParcelShop2
    {
        $new = clone $this;
        $new->payments = $payments;

        return $new;
    }

    public function getGroups(): CParcelShop2GroupsArray
    {
        return $this->groups;
    }

    public function withGroups(CParcelShop2GroupsArray $groups): CParcelShop2
    {
        $new = clone $this;
        $new->groups = $groups;

        return $new;
    }

    public function getServices(): CParcelShop2ServicesArray
    {
        return $this->services;
    }

    public function withServices(CParcelShop2ServicesArray $services): CParcelShop2
    {
        $new = clone $this;
        $new->services = $services;

        return $new;
    }

    public function getValidity(): CParcelShop2ValidsArray
    {
        return $this->validity;
    }

    public function withValidity(CParcelShop2ValidsArray $validity): CParcelShop2
    {
        $new = clone $this;
        $new->validity = $validity;

        return $new;
    }

    public function getDesc(): CParcelShop2DescArray
    {
        return $this->desc;
    }

    public function withDesc(CParcelShop2DescArray $desc): CParcelShop2
    {
        $new = clone $this;
        $new->desc = $desc;

        return $new;
    }

    public function getInfo(): CParcelShop2InfoArray
    {
        return $this->info;
    }

    public function withInfo(CParcelShop2InfoArray $info): CParcelShop2
    {
        $new = clone $this;
        $new->info = $info;

        return $new;
    }

    public function jsonSerialize()
    {
        return [
            'id' => $this->id,
            'payments' => $this->payments,
        ];
    }
}
