// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "./simpleStorage.sol";

contract StorageFactory is SimpleStorage {

    SimpleStorage[] public simpleStorageArray;

    function createSimpleStorageContract() public {
        SimpleStorage simpleStorage = new SimpleStorage();
        simpleStorageArray.push(simpleStorage);
    }

    // interacting with the deployed contract methods
    function sfStore (uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
        // you'll need
        // Address -> contract address
        // ABI -> application binary interface

        SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
        simpleStorage.store(_simpleStorageNumber);
    }

    function sfGet (uint256 _simpleStorageIndex) public view returns (uint256) {
        SimpleStorage simpleStorage = SimpleStorage(address(simpleStorageArray[_simpleStorageIndex]));
        return simpleStorage.retrieve();
        // or
        // return SimpleStorage(address(simpleStorageArray[_simpleStorageIndex])).retrieve()
    }
}