class Seismometer(object):
    stats = None

    def __init__(self, seismometer_id, directory):
        self.seismometer_id = seismometer_id
        self.directory = directory

        self.last_saved_hour = datetime.today().hour
        self.last_saved_minute = datetime.today().minute

        self.stream_manager = StreamManager(self.directory /
                                            MSEED_FILES_DIRECTORY)
        self.stream_plotter = StreamPlotter(self.directory /
                                            IMAGE_FILES_DIRECTORY)

    def create_folders(self):
        mseed_path = self.directory / MSEED_FILES_DIRECTORY
        image_path = self.directory / IMAGE_FILES_DIRECTORY

        if not mseed_path.exists():
            mseed_path.mkdir(parents=True)

        if not image_path.exists():
            image_path.mkdir(parents=True)

    async def handle_data(self, values, stats):
        self.stats = stats
        await self.stream_manager.append_values(values)
        await self.save_plots_and_mseed()

    async def get_last_seconds_of_data(self, seconds):
        stream = await self.stream_manager.get_wrapped_stream()
        endtime = stream[0].stats.endtime
        starttime = endtime - seconds
        slice = stream.slice(starttime, endtime)
        return slice[0].data.tolist() if slice.count() > 0 else []

    async def save_plots_and_mseed(self):
        current_minute = datetime.today().minute
        current_hour = datetime.today().hour
        if self.last_saved_minute != current_minute:
            await self.stream_plotter.save_last_10_minutes_plot(
                await self.stream_manager.get_wrapped_stream())
            await self.stream_plotter.save_last_60_minutes_plot(
                await self.stream_manager.get_wrapped_stream())
            await self.stream_manager.save_to_file()
            self.last_saved_minute = current_minute

        if self.last_saved_hour != current_hour:
            await self.stream_plotter.save_hour_plot(
                await self.stream_manager.get_wrapped_stream(),
                self.last_saved_hour)
            self.last_saved_hour = current_hour

        if not self.stream_manager.is_valid_for_current_date():
            await self.stream_plotter.save_day_plot(
                await self.stream_manager.get_wrapped_stream())

            self.stream_manager.begin_new_stream()
            await self.stream_manager.save_to_file()