#Student-BT
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract StudentData {

    // Structure to store student information
    struct Student {
        uint256 rollNo;
        string name;
        uint256 marks;
    }

    // Dynamic array of students
    Student[] private students;

    // Events
    event StudentAdded(
        uint256 indexed rollNo,
        string name,
        uint256 marks
    );

    event FallbackCalled(
        address indexed sender,
        uint256 value,
        bytes data
    );

    // Add student details
    function addStudent(
        uint256 _rollNo,
        string memory _name,
        uint256 _marks
    ) public {
        students.push(Student(_rollNo, _name, _marks));

        emit StudentAdded(_rollNo, _name, _marks);
    }

    // Retrieve student details using array index
    function getStudent(uint256 index)
        public
        view
        returns (
            uint256 rollNo,
            string memory name,
            uint256 marks
        )
    {
        require(index < students.length, "Invalid index");

        Student memory s = students[index];

        return (s.rollNo, s.name, s.marks);
    }

    // Get total number of students
    function getTotalStudents() public view returns (uint256) {
        return students.length;
    }

    // Fallback function
    fallback() external payable {
        emit FallbackCalled(msg.sender, msg.value, msg.data);
    }

    // Handles plain ETH transfers with empty calldata
    receive() external payable {
        emit FallbackCalled(msg.sender, msg.value, "");
    }

    // Get the ETH balance held by the contract
    function getContractBalance() public view returns (uint256) {
        return address(this).balance;
    }
}