class Raykit::DotNet

def self.get_package_names(filename)

def self.get_package_names(filename)
  package_names = []
  if File.exist?(filename) && filename.include?(".csproj")
    regex = /<PackageReference Include="([\w.-]+)"/
    text = IO.read(filename)
    text.scan(regex).each do |m|
      package_names << m.first.to_s
    end
  end
  package_names
end

def self.init_new(name, template)

def self.init_new(name, template)
  if (!File.exist?("#{name}/#{name}.csproj"))
    puts "  #{name}.csproj not found, creating..."
    run("dotnet new #{template} --name #{name} --output #{name} --language C# ")
  else
    puts "  #{name}.csproj already exists"
  end
end

def self.initialize_csharp_console(name)

initialize a C# console application
def self.initialize_csharp_console(name)
  unless Dir.exist?(name)
    FileUtils.mkdir(name)
    Dir.chdir(name) do
      puts `dotnet new console -lang C#`
    end
    puts `dotnet new sln`
    puts `dotnet sln #{name}.sln add #{name}/#{name}.csproj`
    FileUtils.mkdir("#{name}.Test") unless Dir.exist?("#{name}.Test")
    Dir.chdir("#{name}.Test") do
      puts `dotnet new nunit -lang C#`
      puts `dotnet add reference ../#{name}/#{name}.csproj`
    end
    puts `dotnet sln #{name}.sln add #{name}.Test/#{name}.Test.csproj`
  end
end

def self.initialize_csharp_lib(name)

initialize a C# library
def self.initialize_csharp_lib(name)
  puts `dotnet new sln --name #{name}` unless File.exist?("#{name}.sln")
  unless Dir.exist?(name)
    FileUtils.mkdir(name)
    Dir.chdir(name) do
      puts `dotnet new classlib -lang C#`
    end
    # puts `dotnet new sln`

    puts `dotnet sln #{name}.sln add #{name}/#{name}.csproj`
    FileUtils.mkdir("#{name}.Test") unless Dir.exist?("#{name}.Test")
    Dir.chdir("#{name}.Test") do
      puts `dotnet new nunit -lang C#`
      puts `dotnet add reference ../#{name}/#{name}.csproj`
    end
    puts `dotnet sln #{name}.sln add #{name}.Test/#{name}.Test.csproj`
  end
end

def self.initialize_csharp_service(name)

initialize a C# worker service
def self.initialize_csharp_service(name)
  unless Dir.exist?(name)
    FileUtils.mkdir(name)
    Dir.chdir(name) do
      puts `dotnet new worker -lang C#`
    end
    puts `dotnet new sln`
    puts `dotnet sln #{name}.sln add #{name}/#{name}.csproj`
  end
end

def self.initialize_csharp_wpf_application(name)

initialize a C# wpf application
def self.initialize_csharp_wpf_application(name)
  puts `dotnet new sln --name #{name}`
  unless Dir.exist?(name)
    FileUtils.mkdir(name)
    Dir.chdir(name) do
      puts `dotnet new wpf -lang C#`
    end
  end
  puts `dotnet sln #{name}.sln add #{name}/#{name}.csproj`
  initialize_csharp_lib("#{name}.Library")
  puts `dotnet sln #{name}.sln add #{name}.Library/#{name}.Library.csproj`
  puts `dotnet sln #{name}.sln add #{name}.Library.Test/#{name}.Library.Test.csproj`
end

def self.initialize_fsharp_lib(name)

initialize an F# library
def self.initialize_fsharp_lib(name)
  puts `dotnet new sln --name #{name}` unless File.exist?("#{name}.sln")
  unless Dir.exist?(name)
    FileUtils.mkdir(name)
    Dir.chdir(name) do
      puts `dotnet new classlib -lang F#`
    end
    # puts `dotnet new sln`

    puts `dotnet sln #{name}.sln add #{name}/#{name}.fsproj`
    FileUtils.mkdir("#{name}.Test") unless Dir.exist?("#{name}.Test")
    Dir.chdir("#{name}.Test") do
      puts `dotnet new nunit -lang F#`
      puts `dotnet add reference ../#{name}/#{name}.fsproj`
    end
    puts `dotnet sln #{name}.sln add #{name}.Test/#{name}.Test.fsproj`
  end
end