import matplotlib.pyplot as plt
import numpy as np
from numpy import sin, pi
from scipy.integrate import quad

t_kraj = 0.03
t = np.linspace(0, t_kraj, 200)


def u(t):
    return Umax * sin(100 * pi * t)


def i(t):
    return Imax * sin(100 * pi * t + a)


def p(t):
    return u(t) * i(t)


def poz(x):
    return 1 if x >= 0 else 0


def neg(x):
    return 1 if x < 0 else 0


def p_poz(t):
    return p(t) * poz(p(t))


def p_neg(t):
    return p(t) * neg(p(t))


def integrali():
    I, _ = quad(p, 0, t_kraj)
    Psr = I / t_kraj
    I, _ = quad(p_poz, 0, t_kraj)
    Psr_poz = I / t_kraj
    I, _ = quad(p_neg, 0, t_kraj)
    Psr_neg = I / t_kraj
    plt.plot(t, u(t), "-b", label="u")
    plt.plot(t, i(t), "-r", label="i")
    plt.plot(t, p(t), "-g", label="p")
    plt.plot([0, t_kraj], [Psr_poz, Psr_poz], "-c")
    plt.plot([0, t_kraj], [Psr_neg, Psr_neg], "-m")
    plt.plot([0, t_kraj], [Psr, Psr], "-k", label="Psr")
    plt.annotate(xy=[t_kraj, Psr], text=f" {Psr:.2f}")
    plt.annotate(xy=[t_kraj, Psr_poz], text=f" {Psr_poz:.2f}")
    plt.annotate(xy=[t_kraj, Psr_neg], text=f" {Psr_neg:.2f}")
    plt.xlim(0, t_kraj)
    plt.legend(loc="upper left")
    plt.grid()
    return Psr, Psr_poz, Psr_neg


Umax, Imax, a = 5, 3, 0
plt.subplot(221)
Psr, Psr_poz, Psr_neg = integrali()
plt.ylim(-10, 25)

Umax, Imax, a = 5, 6, -pi / 3
plt.subplot(222)
Psr, Psr_poz, Psr_neg = integrali()
plt.ylim(-10, 25)

Umax, Imax, a = 5, 6, -pi / 2
plt.subplot(223)
Psr, Psr_poz, Psr_neg = integrali()
plt.ylim(-25, 25)

plt.show()
