require 'package'

class Dexed < Package
  description 'Dexed, the D Extended EDitor, is an IDE for the D programming language, its compilers, tools and libraries.'
  homepage 'https://gitlab.com/basile.b/dexed'
  version '3.9.26'
  license 'Boost Software License - Version 1.0'
  compatibility 'x86_64'
  min_glibc '2.34'
  source_url "https://gitlab.com/basile.b/dexed/-/releases/v#{version}/downloads/binaries/dexed.#{version}.linux64.zip"
  source_sha256 '2d066f96f22f988f580d922c3ec886c41da0c1a74620e834969323b1fe26d8f3'

  depends_on 'dmd'
  depends_on 'gtk2'
  depends_on 'xdg_base'
  depends_on 'sommelier'

  no_compile_needed

  def self.build
    File.write 'dexed.desktop', <<~EOF
      [Desktop Entry]
      Categories=Application;IDE;Development;
      Exec=dexed %f
      GenericName=dexed
      Icon=#{CREW_PREFIX}/share/pixmaps/dexed.png
      Keywords=editor;Dlang;IDE;dmd;
      Name=dexed
      StartupNotify=true
      Terminal=false
      Type=Application
    EOF
    File.write 'compilerspaths.txt', <<~EOF
      object TCompilersPaths
        definedAsGlobal = dmd
        pathsForCompletion = dmd
        DmdExeName = '#{CREW_PREFIX}/bin/dmd'
      end
    EOF
  end

  def self.install
    FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/bin"
    FileUtils.mkdir_p CREW_DEST_LIB_PREFIX
    FileUtils.mkdir_p "#{CREW_DEST_HOME}/.config/dexed"
    FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/share/pixmaps"
    FileUtils.mkdir_p "#{CREW_DEST_PREFIX}/share/applications"
    FileUtils.install %w[dcd-client dcd-server dexed dscanner], "#{CREW_DEST_PREFIX}/bin", mode: 0o755
    FileUtils.install 'libdexed-d.so', CREW_DEST_LIB_PREFIX, mode: 0o644
    FileUtils.install 'dexed.png', "#{CREW_DEST_PREFIX}/share/pixmaps", mode: 0o644
    FileUtils.install 'compilerspaths.txt', "#{CREW_DEST_HOME}/.config/dexed", mode: 0o644
    FileUtils.install 'dexed.desktop', "#{CREW_DEST_PREFIX}/share/applications", mode: 0o644
  end

  def self.postremove
    config_dir = "#{HOME}/.config/dexed"
    if Dir.exist? config_dir
      print "Would you like to remove the #{config_dir} directory? [y/N] "
      case $stdin.gets.chomp.downcase
      when 'y', 'yes'
        FileUtils.rm_rf config_dir
        puts "#{config_dir} removed.".lightgreen
      else
        puts "#{config_dir} saved.".lightgreen
      end
    end
  end
end
