import os
import subprocess

from selfprivacy_api.migrations.migration import Migration
from selfprivacy_api.utils import ReadUserData, WriteUserData
from selfprivacy_api.utils.block_devices import BlockDevices


class MountVolume(Migration):
    """Mount volume."""

    def get_migration_name(self):
        return "mount_volume"

    def get_migration_description(self):
        return "Mount volume if it is not mounted."

    def is_migration_needed(self):
        try:
            with ReadUserData() as userdata:
                return "volumes" not in userdata
        except Exception as e:
            print(e)
            return False

    def migrate(self):
        # Get info about existing volumes
        # Write info about volumes to userdata.json
        try:
            volumes = BlockDevices().get_block_devices()
            # If there is an unmounted volume sdb,
            # Write it to userdata.json
            is_there_a_volume = False
            for volume in volumes:
                if volume.name == "sdb":
                    is_there_a_volume = True
                    break
            with WriteUserData() as userdata:
                userdata["volumes"] = []
                if is_there_a_volume:
                    userdata["volumes"].append(
                        {
                            "device": "/dev/sdb",
                            "mountPoint": "/volumes/sdb",
                            "fsType": "ext4",
                        }
                    )
            print("Done")
        except Exception as e:
            print(e)
            print("Error mounting volume")