#!/bin/bash


use_kissy="false"
# Function to display ASCII art based on the current distro's logo or Tux
display_ascii_art() {
    case "$(uname -s)" in
        Linux)
            case "$(detect_distro)" in
                debian)
                    cat << "DEBIAN"
              KNXX0 0KN              
          WNXK0000000000KXNNN.       
       XXK00000,         O000KKNo    
     XK0000.                l0000X:  
   .X000'                     x000Kk 
  dX00                         :00',.
.l00;             WNN;.Wo       o0K;.
.K0x            N               .00o 
l00           'x                .00K 
l0k           0'                ;00. 
l0o           kd          .     d0:  
l0o           .K;              O0;   
;0K.         .' 0X           kXl     
 00;            .'lNWl  .WWXK        
 :0KN               k,               
  l00d                               
   l00l                              
    '00x                             
      d0N,                           
        dKN:                         
           KXx                       
              .XW                    
                   ,O.     
DEBIAN
                    ;;
                arch)
                    cat << "ARCH"
                      :                      
                     :M:                     
                    'WMM;                    
                   .NMMMW'                   
                  .XMMMMMN.                  
                  KMMMMMMMN.                 
                 xMMMMMMMMMX.                
                o,:KMMMMMMMMX.               
               0MMWkkKWMMMMMMN.              
              0MMMMMMMMMMMMMMMN.             
            .KMMMMMMMMMMMMMMMMMN'            
           .XMMMMMMMMMMMMMMMMMMMW,           
          .NMMMMMMMMMMMMMMMMMMMMMW;          
         ,WMMMMMMMMK:. .:0MMMMMMMMMc         
        :WMMMMMMMMx       oMMMMMMMMMo        
       lMMMMMMMMMK         OMMMMMMMMMx       
      xMMMMMMMMMMo         :MMMMMMXOx0k      
     OMMMMMMMMMMMo         ;MMMMMMMMWO:.     
   .KMMMMMMMMW0ko,         'ok0WMMMMMMMWd.   
  .XMMMMNkl,.                   .,lkNMMMMN'  
 ,WMKx;.                             .;xKMW, 
,x;.                                     .;x,
ARCH
                    ;;
                fedora)
                    cat << "FEDORA"
                   ,kkkkkk;                   
             :OKXNWMMMMMMMMWNXKOl             
          cKNMMMMMMMMMMMMMMMMMMMMNKo          
        xNMMMMMMMMMMMMMMMMMMMMMMMMMMNO        
      ;NMMMMMMMMMMMMMMMMN    dMMMMMMMMNc      
     xMMMMMMMMMMMMMMMM          dMMMMMMMO     
    dMMMMMMMMMMMMMMMM   .0KXKk   lMMMMMMMk    
   'MMMMMMMMMMMMMMMM0   KMMMMM'  .MMMMMMMM;   
   0MMMMMMMMMMMMMMMM0   KMMMMMXkkXMMMMMMMMX   
   MMMMMMMMMMMMMMMMMO   XMMMMMMMMMMMMMMMMMM   
   MMMMMMMMM.      dO       .MMMMMMMMMMMMMM   
   MMMMMMM,    dkkkN0   dkkOXMMMMMMMMMMMMMN   
   MMMMMMc   0WMMMMM0   XMMMMMMMMMMMMMMMMMc   
   MMMMMM.  ,MMMMMMMx   XMMMMMMMMMMMMMMMMK    
   MMMMMMl   dMMMMMW   .MMMMMMMMMMMMMMMMX     
   MMMMMMMd           ,NMMMMMMMMMMMMMMMd      
   MMMMMMMMXO.      xKWMMMMMMMMMMMMMMN        
   MMMMMMMMMMMNXXXNWMMMMMMMMMMMMMMMk          
   lMMMMMMMMMMMMMMMMMMMMMMMMMMMMo             
      WMMMMMMMMMMMMMMMMMMW                    
                                       
FEDORA
                    ;;
                *)
                    cat << "UNIXLIKE"
  kko     'kk, lkkkkkkko    :kk. kkx      .c  
  XXx     'XX; dXX     lKO  cXX.  ;X0;   k    
  XXx     'XX; xXX      XXl cXX.    0KOl'     
  KXk     'XX; xXX      XXx cXX.    :dXKc     
  .XX.    'XX; dXX      XXx cXX.  .x   dXO    
     KkxxxOXX; dXX      XXk cXX. d.      XKl  Like
UNIXLIKE
                    ;;
            esac
            ;;
        *)
            cat << "UNIXLIKE"
  kko     'kk, lkkkkkkko    :kk. kkx      .c  
  XXx     'XX; dXX     lKO  cXX.  ;X0;   k    
  XXx     'XX; xXX      XXl cXX.    0KOl'     
  KXk     'XX; xXX      XXx cXX.    :dXKc     
  .XX.    'XX; dXX      XXx cXX.  .x   dXO    
     KkxxxOXX; dXX      XXk cXX. d.      XKl  Like
UNIXLIKE
            ;;
    esac
}

# Function to detect the current Linux distribution based on package manager
detect_distro() {
    if [ -x "$(command -v dpkg)" ]; then
        echo "debian"
    elif [ -x "$(command -v pacman)" ]; then
        echo "arch"
    elif [ -x "$(command -v dnf)" ] || [ -x "$(command -v rpm-ostree)" ]; then
        echo "fedora"
    else
        echo "unknown"
    fi
}

# Function to display system information
display_system_info() {
    echo "System Information:"
    echo "-------------------"
    echo "Hostname: $(hostname)"
    echo "Kernel: $(uname -r)"
    echo "Processor: $(uname -p)"
    echo "Uptime: $(uptime -p)"
    echo "RAM Total: $(free -m | awk '/^Mem:/{print $2 " MB"}')"
    echo "RAM Free: $(free -m | awk '/^Mem:/{print $4 " MB"}')"
    echo "Shell: $SHELL"
    echo "User: $USER"
    echo "Home Directory: $HOME"
    echo "Terminal: $TERM"
}

# Function to check if the system is Arch Linux
is_arch() {
    if [ "$(detect_distro)" == "arch" ]; then
        echo "Yes"
    else
        echo "No"
    fi
}

# Function to display package manager information
display_package_manager_info() {
    echo ""
    echo "Package Manager:"
    echo "----------------"
    case "$(detect_distro)" in
        debian)
            echo "APT (Debian-based)"
            ;;
        fedora)
            if [ -x "$(command -v dnf)" ]; then
                echo "DNF (Fedora-based)"
            elif [ -x "$(command -v rpm-ostree)" ]; then
                echo "RPM-Ostree (Fedora Silverblue)"
            fi
            ;;
        arch)
            echo "Pacman (Arch Linux)"
            ;;
        *)
            echo "Unknown"
            ;;
    esac
}

# Function to display the script's usage
display_usage() {
    echo "Usage: $0 [options]"
    echo ""
    echo "Options:"
    echo "  -a, --all         Display all information with ASCII art"
    echo "  -NA               Display all information without ASCII art"
    echo "  -bk               Use the sillycat ASCII art"
    echo "  -h, --help        Display this help message"
}

ascii_displayer() {
    if [ "$1" == "true" ]; then
                cat << "ASCII"
⠀⠀⣟⠶⣄⡀⡀            ⣰⠏⣟⠛⠲⢤
⠀⢸⠂⠀⠀⠀⠘⣧⠀⠀⣟⠛⠲⢤⡀⠀⠀⣰⠏⠀⠀⠀⠀⠀⢹⡀
⠀⡿⠀⠀⠀⠀⠀⠈⢷⡀⢻⡀⠀⠀⠙⢦⣰⠏⠀⠀⠀⠀⠀⠀⢸⠀
⠀⡇⠀⠀⠀⠀⠀⠀⢀⣻⠞⠛⠀⠀⠀⠀⠻⠀⠀⠀⠀⠀⠀⠀⢸⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠛⠓⠒⠓⠓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀
⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠀
⠀⢿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⠀⠀⢀⡟⠀
⠀⠘⣇⠀⠘⣿⠋⢹⠛⣿⡇⠀⠀⠀⠀⣿⣿⡇⠀⢳⠉⠀⣠⡾⠁⠀
⣦⣤⣽⣆⢀⡇⠀⢸⡇⣾⡇⠀⠀⠀⠀⣿⣿⡷⠀⢸⡇⠐⠛⠛⣿⠀
⠹⣦⠀⠀⠸⡇⠀⠸⣿⡿⠁⢀⡀⠀⠀⠿⠿⠃⠀⢸⠇⠀⢀⡾⠁⠀
⠀⠈⡿⢠⢶⣡⡄⠀⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀⣴⣧⠆⠀⢻⡄⠀⠀
⠀⢸⠃⠀⠘⠉⠀⠀⠀⠠⣄⡴⠲⠶⠴⠃⠀⠀⠀⠉⡀⠀⠀⢻⡄⠀
⠀⠘⠒⠒⠻⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⠞⠛⠒⠛⠋⠁⠀
⠀⠀⠀⠀⠀⠀⠸⣟⠓⠒⠂⠀⠀⠀⠀⠀⠈⢷⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣼⣃⡀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠉⣹⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀
ASCII
    else
    display_ascii_art
    fi
}

# Main function
main() {
    while [[ $# -gt 0 ]]; do
        case $1 in
            -bk)
                use_kissy="true"
                ascii_displayer "$use_kissy"
                display_system_info
                display_package_manager_info
                echo "Is Arch BTW: $(is_arch)"
                shift
                ;;
            -a | --all)
                ascii_displayer "$use_kissy"
                display_system_info
                display_package_manager_info
                echo "Is Arch BTW: $(is_arch)"
                ;;
            -NA)
                display_system_info
                display_package_manager_info
                echo "Is Arch BTW: $(is_arch)"
                ;;
            -h | --help)
                display_usage
                ;;
            *)
                echo "Error: Invalid option"
                display_usage
                ;;
        esac
        shift
    done


}

# Run the main function
main "$@"