def thank_screen(screen, nb_sample):
    background = PGBackground(THANK_BACKGROUND_PATH)
    elements = [background]
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        for event in events:
            if event.type in [pygame.KEYUP, pygame.MOUSEBUTTONUP]:
                return
        pygame.time.wait(40)
def instruction_screen(screen):
    background = PGBackground(INSTRUCTION_BACKGROUND_PATH)
    button_next = PGEmptyButton(INSTR_NEXT_BUTTON_RECT, absolute=False)

    elements = [background, button_next]
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        if button_next.event_check(events) is PGAction.CLICKED:
            return
        for event in events:
            if event.type == pygame.KEYUP and event.key in [
                    pygame.K_ESCAPE, pygame.K_RETURN, pygame.K_SPACE
            ]:
                return
        pygame.time.wait(40)
def recording(screen, channels=4):
    background = PGBackground(RECORDING_BACKGROUND_PATH)
    logo = PGImage(LOGO_PATH, LOGO_RECT, absolute=False)
    logo.visible = False
    text_wait = PGLabel(RECORDING_WAIT_COORD, "Attendez ... (Soyez prêt !)",
                        100)
    text_wait.visible = True

    text_speak = PGLabel(RECORDING_SPEAK_COORD, "Dites LinTo ! ", 100)
    text_speak.visible = False

    elements = [background, logo, text_wait, text_speak]

    drawElements(screen, elements)
    pygame.time.wait(1000)

    params = AudioParams()
    params.channels = channels

    condition = Condition()
    frames = []
    t = threading.Thread(target=record, args=(
        params,
        frames,
        condition,
    ))
    t.start()
    pygame.time.wait(1000)

    logo.visible = True
    text_wait.visible = False
    text_speak.visible = True

    drawElements(screen, elements)
    clock = pygame.time.Clock()
    while condition.state:
        for event in pygame.event.get():
            if event.type in [pygame.MOUSEBUTTONUP, pygame.KEYUP]:
                condition.state = False
                break
        clock.tick(FPS)
    t.join()
    if len(frames) == 0:
        return None
    return b''.join(frames)
def gender_screen(screen):
    background = PGBackground(GENDER_BACKGROUND_PATH)
    button_man = PGEmptyButton(GENDER_MAN_BUTTON_RECT, absolute=False)
    button_woman = PGEmptyButton(GENDER_WOMAN_BUTTON_RECT, absolute=False)

    elements = [background, button_man, button_woman]
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        if button_man.event_check(events) is PGAction.CLICKED:
            return True
        if button_woman.event_check(events) is PGAction.CLICKED:
            return False
        for event in events:
            if event.type == pygame.KEYUP:
                if event.key in [pygame.K_RETURN, pygame.K_RIGHT, pygame.K_f]:
                    return False
                if event.key in [pygame.K_LEFT, pygame.K_SPACE, pygame.K_h]:
                    return False
        pygame.time.wait(40)
def start_screen(screen):
    background = PGBackground(START_BACKGROUND_PATH)
    button_start = PGEmptyButton(START_START_BUTTON_RECT, absolute=False)

    elements = [background, button_start]
    escape_counter = 0
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        if button_start.event_check(events) is PGAction.CLICKED:
            return
        for event in events:
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    escape_counter += 1
                    if escape_counter >= 3:
                        exit(0)
                if event.key in [pygame.K_SPACE, pygame.K_RETURN]:
                    return
        pygame.time.wait(40)
def failed_screen(screen):
    background = PGBackground(FAILED_BACKGROUND_PATH)
    button_continue = PGEmptyButton(FAILED_RETRY_BUTTON_RECT, absolute=False)
    button_quit = PGEmptyButton(FAILED_QUIT_BUTTON_RECT, absolute=False)
    elements = [background, button_continue, button_quit]
    drawElements(screen, elements)

    while True:
        events = pygame.event.get()
        if button_continue.event_check(events) is PGAction.CLICKED:
            return True
        if button_quit.event_check(events) is PGAction.CLICKED:
            return False
        for event in events:
            if event.type == pygame.KEYUP:
                if event.key in [pygame.K_ESCAPE]:
                    return False
                if event.key in [pygame.K_RETURN, pygame.K_SPACE, pygame.K_c]:
                    return True
        pygame.time.wait(40)
def confirm_screen(screen, gender):
    background = PGBackground(CONFIRM_BACKGROUND_PATH)
    button_yes = PGEmptyButton(CONFIRM_YES_BUTTON_RECT, absolute=False)
    button_no = PGEmptyButton(CONFIRM_NO_BUTTON_RECT, absolute=False)

    elements = [background, button_yes, button_no]
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        if button_yes.event_check(events) is PGAction.CLICKED:
            return True
        if button_no.event_check(events) is PGAction.CLICKED:
            return False
        for event in events:
            if event.type == pygame.KEYUP:
                if event.key in [pygame.K_ESCAPE, pygame.K_n]:
                    return False
                if event.key in [pygame.K_RETURN, pygame.K_SPACE, pygame.K_o]:
                    return True
        pygame.time.wait(40)
def check_screen(screen, folder, gender, buffer, channels=4):
    params = AudioParams()
    params.channels = channels

    background = PGBackground(CHECK_BACKGROUND_PATH)
    button_yes = PGEmptyButton(CHECK_OK_BUTTON_RECT, absolute=False)
    button_no = PGEmptyButton(CHECK_KO_BUTTON_RECT, absolute=False)
    button_replay = PGEmptyButton(CHECK_REPLAY_BUTTON_RECT, absolute=False)

    elements = [background, button_yes, button_no, button_replay]

    drawElements(screen, elements)

    play_audio(buffer, params)

    while True:
        events = pygame.event.get()
        if button_yes.event_check(events) is PGAction.CLICKED:
            save_audio(
                params, os.path.join(folder,
                                     generate_file_name(folder, gender)),
                buffer)
            return True
        if button_no.event_check(events) is PGAction.CLICKED:
            return False
        if button_replay.event_check(events) is PGAction.CLICKED:
            play_audio(buffer, params)

        for event in events:
            if event.type == pygame.KEYUP:
                if event.key in [pygame.K_ESCAPE, pygame.K_n, pygame.K_RIGHT]:
                    return False
                if event.key in [
                        pygame.K_RETURN, pygame.K_SPACE, pygame.K_o,
                        pygame.K_LEFT
                ]:
                    return True
                if event.key in [pygame.K_r, pygame.K_UP]:
                    play_audio(buffer, params)
        pygame.time.wait(40)
def continue_screen(screen, nb_sample):
    background = PGBackground(CONTINUE_BACKGROUND_PATH)
    button_yes = PGEmptyButton(CONTINUE_YES_BUTTON_RECT, absolute=False)
    button_no = PGEmptyButton(CONTINUE_NO_BUTTON_RECT, absolute=False)
    label_counter = PGLabel((0.67, 0.035),
                            text=str(nb_sample),
                            font_size=270,
                            color=(230, 230, 0))

    elements = [background, button_yes, button_no, label_counter]
    while True:
        drawElements(screen, elements)
        events = pygame.event.get()
        if button_yes.event_check(events) is PGAction.CLICKED:
            return True
        if button_no.event_check(events) is PGAction.CLICKED:
            return False
        for event in events:
            if event.type == pygame.KEYUP:
                if event.key in [pygame.K_ESCAPE, pygame.K_n]:
                    return False
                if event.key in [pygame.K_RETURN, pygame.K_SPACE, pygame.K_o]:
                    return True
        pygame.time.wait(40)