import numpy as np
from constitutiveModels import bilinMonotonic

def sectionStateDetermin_uniaxialFiber(materialInput,coordinates_fibers_columns, area_fibers_columns,ds_iSec):
    numFiber=len(area_fibers_columns)

    # Initialize section state variables
    Qsr=np.zeros(2)
    ks=np.zeros((2,2))

    #Go over each fiber in section
    for i in range(numFiber):
        #Fiber properties 
        x=coordinates_fibers_columns[i][0]
        y=coordinates_fibers_columns[i][1]
        A=area_fibers_columns[i]

        # Section geometrical vector
        lkfiber=np.array([1,y])

        #Strain
        strain=lkfiber@ds_iSec

        # Material state determination
        stress, tangentModulus=bilinMonotonic(materialInput[0],materialInput[1],materialInput[2],strain)

        # Integrate all fibers
        Qsr+=lkfiber.T*A*stress
        ks+=np.outer(lkfiber,lkfiber)*A*tangentModulus


    return Qsr, ks

        

