<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Framework\ObjectManager\TestAsset;

class HasOptionalParameters
{
    const CONSTRUCTOR_STRING_PARAM_DEFAULT = 'default';
    const CONSTRUCTOR_INT_PARAM_DEFAULT = 0;

    /**
     * @var Basic
     */
    private $optionalObjectParameter;

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

    /**
     * @var int
     */
    private $optionalIntegerParameter;

    /**
     * @var TestAssetInterface
     */
    private $optionalInterfaceParameter;

    /**
     * @var TestAssetInterface
     */
    private $requiredInterfaceParam;

    /**
     * @var Basic
     */
    private $requiredObjectParameter;

    /**
     * @param TestAssetInterface $requiredInterfaceParameter
     * @param Basic $requiredObjectParameter
     * @param TestAssetInterface $optionalInterfaceParameter
     * @param Basic $optionalObjectParameter
     * @param string $optionalStringParameter
     * @param int $optionalIntegerParameter
     */
    public function __construct(
        TestAssetInterface $requiredInterfaceParameter,
        Basic $requiredObjectParameter,
        ?TestAssetInterface $optionalInterfaceParameter = null,
        ?Basic $optionalObjectParameter = null,
        $optionalStringParameter = self::CONSTRUCTOR_STRING_PARAM_DEFAULT,
        $optionalIntegerParameter = self::CONSTRUCTOR_INT_PARAM_DEFAULT
    ) {
        $this->optionalObjectParameter = $optionalObjectParameter;
        $this->optionalStringParameter = $optionalStringParameter;
        $this->optionalIntegerParameter = $optionalIntegerParameter;
        $this->optionalInterfaceParameter = $optionalInterfaceParameter;
        $this->requiredInterfaceParam = $requiredInterfaceParameter;
        $this->requiredObjectParameter = $requiredObjectParameter;
    }

    /**
     * @return Basic
     */
    public function getOptionalObjectParameter()
    {
        return $this->optionalObjectParameter;
    }

    /**
     * @return string
     */
    public function getOptionalStringParameter()
    {
        return $this->optionalStringParameter;
    }

    /**
     * @return int
     */
    public function getOptionalIntegerParameter()
    {
        return $this->optionalIntegerParameter;
    }

    /**
     * @return TestAssetInterface
     */
    public function getOptionalInterfaceParameter()
    {
        return $this->optionalInterfaceParameter;
    }

    /**
     * @return TestAssetInterface
     */
    public function getRequiredInterfaceParam()
    {
        return $this->requiredInterfaceParam;
    }

    /**
     * @return Basic
     */
    public function getRequiredObjectParameter()
    {
        return $this->requiredObjectParameter;
    }
}
