from manimlib.imports import *
from active_projects.diffyq.part2.wordy_scenes import *


class IveHeardOfThis(TeacherStudentsScene):
    def construct(self):
        point = VectorizedPoint()
        point.move_to(3 * RIGHT + 2 * UP)
        self.student_says(
            "I've heard\\\\", "of this!",
            student_index=1,
            target_mode="hooray",
            bubble_kwargs={
                "height": 3,
                "width": 3,
                "direction": RIGHT,
            },
            run_time=1,
        )
        self.change_student_modes(
            "thinking", "hooray", "thinking",
            look_at_arg=point,
            added_anims=[self.teacher.change, "happy"]
        )
        self.wait(3)
        self.student_says(
            "But who\\\\", "cares?",
            student_index=1,
            target_mode="maybe",
            bubble_kwargs={
                "direction": RIGHT,
                "width": 3,
                "height": 3,
            },
            run_time=1,
        )
        self.change_student_modes(
            "pondering", "maybe", "pondering",
            look_at_arg=point,
            added_anims=[self.teacher.change, "guilty"]
        )
        self.wait(5)


class InFouriersShoes(PiCreatureScene, WriteHeatEquationTemplate):
    def construct(self):
        randy = self.pi_creature
        fourier = ImageMobject("Joseph Fourier")
        fourier.set_height(4)
        fourier.next_to(randy, RIGHT, LARGE_BUFF)
        fourier.align_to(randy, DOWN)

        equation = self.get_d1_equation()
        equation.next_to(fourier, UP, MED_LARGE_BUFF)

        decades = list(range(1740, 2040, 20))
        time_line = NumberLine(
            x_min=decades[0],
            x_max=decades[-1],
            tick_frequency=1,
            tick_size=0.05,
            longer_tick_multiple=4,
            unit_size=0.2,
            numbers_with_elongated_ticks=decades,
            numbers_to_show=decades,
            decimal_number_config={
                "group_with_commas": False,
            },
            stroke_width=2,
        )
        time_line.add_numbers()
        time_line.move_to(ORIGIN, RIGHT)
        time_line.to_edge(UP)
        triangle = ArrowTip(start_angle=-90 * DEGREES)
        triangle.set_height(0.25)
        triangle.move_to(time_line.n2p(2019), DOWN)
        triangle.set_color(WHITE)

        self.play(FadeInFrom(fourier, 2 * LEFT))
        self.play(randy.change, "pondering")
        self.wait()
        self.play(
            DrawBorderThenFill(triangle, run_time=1),
            FadeInFromDown(equation),
            FadeIn(time_line),
        )
        self.play(
            Animation(triangle),
            ApplyMethod(
                time_line.shift,
                time_line.n2p(2019) - time_line.n2p(1822),
                run_time=5
            ),
        )
        self.wait()


class SineCurveIsUnrealistic(TeacherStudentsScene):
    def construct(self):
        self.student_says(
            "But that would\\\\never happen!",
            student_index=1,
            bubble_kwargs={
                "direction": RIGHT,
                "height": 3,
                "width": 4,
            },
            target_mode="angry"
        )
        self.change_student_modes(
            "guilty", "angry", "hesitant",
            added_anims=[
                self.teacher.change, "tease"
            ]
        )
        self.wait(3)
        self.play(
            RemovePiCreatureBubble(self.students[1]),
            self.teacher.change, "raise_right_hand"
        )
        self.change_all_student_modes(
            "pondering",
            look_at_arg=3 * UP,
        )
        self.wait(5)


class IfOnly(TeacherStudentsScene):
    def construct(self):
        self.teacher_says(
            "If only!",
            target_mode="angry"
        )
        self.change_all_student_modes(
            "confused",
            look_at_arg=self.screen
        )
        self.wait(3)


class SoWeGotNowhere(TeacherStudentsScene):
    def construct(self):
        self.student_says(
            "So we've gotten\\\\nowhere!",
            target_mode="angry",
            added_anims=[
                self.teacher.change, "guilty"
            ]
        )
        self.change_all_student_modes("angry")
        self.wait()
        text = TexMobject(
            "&\\text{Actually,}\\\\",
            "&\\sin\\left({x}\\right)"
            "e^{-\\alpha {t}}\\\\",
            "&\\text{isn't far off.}",
            tex_to_color_map={
                "{x}": GREEN,
                "{t}": YELLOW,
            }
        )
        text.scale(0.8)
        self.teacher_says(
            text,
            content_introduction_class=FadeIn,
            bubble_kwargs={
                "width": 4,
                "height": 3.5,
            }
        )
        self.change_all_student_modes(
            "pondering",
            look_at_arg=self.screen
        )
        self.wait(3)
