import os
import subprocess

from selfprivacy_api.migrations.migration import Migration


class MigrateToSelfprivacyChannel(Migration):
    """Migrate to selfprivacy Nix channel."""

    def get_migration_name(self):
        return "migrate_to_selfprivacy_channel"

    def get_migration_description(self):
        return "Migrate to selfprivacy Nix channel."

    def is_migration_needed(self):
        try:
            output = subprocess.check_output(
                ["nix-channel", "--list"], start_new_session=True
            )
            output = output.decode("utf-8")
            first_line = output.split("\n", maxsplit=1)[0]
            return first_line.startswith("nixos") and (
                first_line.endswith("nixos-21.11") or first_line.endswith("nixos-21.05")
            )
        except subprocess.CalledProcessError:
            return False

    def migrate(self):
        # Change the channel and update them.
        # Also, go to /etc/nixos directory and make a git pull
        current_working_directory = os.getcwd()
        try:
            print("Changing channel")
            os.chdir("/etc/nixos")
            subprocess.check_output(
                [
                    "nix-channel",
                    "--add",
                    "https://channel.selfprivacy.org/nixos-selfpricacy",
                    "nixos",
                ]
            )
            subprocess.check_output(["nix-channel", "--update"])
            subprocess.check_output(["git", "pull"])
            os.chdir(current_working_directory)
        except subprocess.CalledProcessError:
            os.chdir(current_working_directory)
            print("Error")