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


class ReactionsToInitialHeatEquation(PiCreatureScene):
    def construct(self):
        randy = self.pi_creature
        randy.set_color(BLUE_C)
        randy.center()

        point = VectorizedPoint().next_to(randy, UL, LARGE_BUFF)
        randy.add_updater(lambda r: r.look_at(point))

        self.play(randy.change, "horrified")
        self.wait()
        self.play(randy.change, "pondering")
        self.wait()
        self.play(
            randy.change, "confused",
            point.next_to, randy, UR, LARGE_BUFF,
        )
        self.wait(2)
        self.play(
            point.shift, 2 * DOWN,
            randy.change, "horrified"
        )
        self.wait(4)


class ContrastPDEToODE(TeacherStudentsScene):
    CONFIG = {
        "random_seed": 2,
    }

    def construct(self):
        student = self.students[2]
        pde, ode = words = VGroup(*[
            TextMobject(
                text + "\\\\",
                "Differential\\\\",
                "Equation"
            )
            for text in ("Partial", "Ordinary")
        ])
        pde[0].set_color(YELLOW)
        ode[0].set_color(BLUE)
        for word in words:
            word.arrange(DOWN, aligned_edge=LEFT)

        words.arrange(RIGHT, buff=LARGE_BUFF)
        words.next_to(student.get_corner(UR), UP, MED_LARGE_BUFF)
        words.shift(UR)
        lt = TexMobject("<")
        lt.scale(1.5)
        lt.move_to(Line(pde.get_right(), ode.get_left()))

        for pi in self.pi_creatures:
            pi.add_updater(lambda p: p.look_at(pde))

        self.play(
            FadeInFromDown(VGroup(words, lt)),
            student.change, "raise_right_hand",
        )
        self.play(
            self.get_student_changes("pondering", "pondering", "hooray"),
            self.teacher.change, "happy"
        )
        self.wait(3)
        self.play(
            Swap(ode, pde),
            self.teacher.change, "raise_right_hand",
            self.get_student_changes(
                "erm", "sassy", "confused"
            )
        )
        self.look_at(words)
        self.change_student_modes(
            "thinking", "thinking", "tease",
        )
        self.wait(3)


class AskAboutWhereEquationComesFrom(TeacherStudentsScene, WriteHeatEquationTemplate):
    def construct(self):
        equation = self.get_d1_equation()
        equation.move_to(self.hold_up_spot, DOWN)

        self.play(
            FadeInFromDown(equation),
            self.teacher.change, "raise_right_hand"
        )
        self.student_says(
            "Um...why?",
            target_mode="sassy",
            student_index=2,
            bubble_kwargs={"direction": RIGHT},
        )
        self.change_student_modes(
            "confused", "confused", "sassy",
        )
        self.wait()
        self.play(
            self.teacher.change, "pondering",
        )
        self.wait(2)


class AskWhyRewriteIt(TeacherStudentsScene):
    def construct(self):
        self.student_says(
            "Why?", student_index=1,
            bubble_kwargs={"height": 2, "width": 2},
        )
        self.students[1].bubble = None
        self.teacher_says(
            "One step closer\\\\to derivatives"
        )
        self.change_student_modes(
            "thinking", "thinking", "thinking",
            look_at_arg=4 * LEFT + 2 * UP
        )
        self.wait(2)


class ReferenceKhanVideo(TeacherStudentsScene):
    def construct(self):
        khan_logo = ImageMobject("KhanLogo")
        khan_logo.set_height(1)
        khan_logo.next_to(self.teacher, UP, buff=2)
        khan_logo.shift(2 * LEFT)

        self.play(
            self.teacher.change, "raise_right_hand",
        )
        self.change_student_modes(
            "thinking", "pondering", "thinking",
            look_at_arg=self.screen
        )
        self.wait()
        self.play(FadeInFromDown(khan_logo))
        self.look_at(self.screen)
        self.wait(15)
