*! Verion: 1.0
*! Update: 2021/5/30 12:32

cap program drop sbldo
program define sbldo, rclass
version 14

syntax anything(name = pkgname)[,REPLACE NO PROFILE]
    
    if "`profile'"!=""{
        cap confirm file "`c(sysdir_stata)'profile.do"
        if _rc==0 & "`replace'"==""{
            di as err "`c(sysdir_stata)'profile.do already exist"
            dis as text  `"You can click the following command to replace it:{stata "sbldo ,replace profile":{bf:sbldo ,replace profile}}"'
            exit
        }
        else{
            copy  "https://songbl-1304948727.cos.ap-guangzhou.myqcloud.com/do/profile.do" "`c(sysdir_stata)'",replace 
        }
        
        exit
    }
    
    local original_pkgname="`pkgname'"
	if strmatch("`pkgname'","*/*")==1 | strmatch("`pkgname'","*\*")==1{
        cap splitpath "`pkgname'"
        if _rc!=0{
            qui ssc install docd
            splitpath "`pkgname'"
        }
        local pkgname=r(filename)
    } 
    if  usubstr("`pkgname'",-3,3) ==".do" {
        local pkgname =plural(2, "`pkgname'","-.do") 
    }
    
    
	if strpos("`original_pkgname'","http")==0{
	  local URL "https://songbl-1304948727.cos.ap-guangzhou.myqcloud.com/do/"
	}
	else{
      local all_pkgname="`pkgname'"+".do"
      local URL =regexr("`original_pkgname'","`all_pkgname'","") 
	}    
    
    local PATH     `"`c(sysdir_plus)'"'        
    local path      =substr("`pkgname'",1,1) 
    local PATH     `PATH'\`path'\ 
    cap mkdir `"`PATH'"'        
	local PATH =subinstr("`PATH'","/","\",.) 
    
    cap confirm file "`PATH'\`pkgname'.do" 
    local rc_confirm =_rc     
    cap qui checksum `"`PATH'\`pkgname'.do"'
    local rc_path =_rc 
    local pathcheck =r(filelen) 
    cap qui checksum  "`URL'`pkgname'.do"
    local rc_url =_rc 
    local urlcheck =r(filelen)         

    
    if `rc_url' == 679 {
        di as err   `"web error 403"'                    
        di as err _col(5)  `"该数据与文档已经被加密。获取密钥,请联系微信:{browse "https://note.youdao.com/ynoteshare1/index.html?id=720635d3824de83e0e764a60eb34e54c&type=note":{bf:songbl_stata}}"'
        exit 679
    } 					
    
    if `rc_url'!=679 & `rc_url'!=0{              
        di as err  `"sbldo copy: "`pkgname'.do" not found. Please check the dofile link carefully."'
        exit 601
    }        
    
    dis as text `"checking {bf:`pkgname'.do} consistency and verifying not already installed..."'
    
    if `rc_confirm'==0 & "`replace'"==""{
                                  
        if `pathcheck'- `urlcheck'!=0{
            dis ""
            dis as text "the following files already exist and are different:"
            dis as text _col(5) `"{stata `"doedit "`PATH'\`pkgname'.do""':{bf:`PATH'\`pkgname'.do}}"'
            dis ""
            dis as err "no files installed or copied"
            dis as err "(no action taken)"
            
            if "`no'"==""{
                doedit `"`PATH'\`pkgname'.do"'
            }
        
            return local  adofile   `"`PATH'\`pkgname'.do"'             
            exit 602
        }
        
        else{
            dis as text _col(5) `"{stata `"doedit "`PATH'\`pkgname'.do""':{bf:`PATH'\`pkgname'.do}} already exist and are up to date."'
            
            if "`no'"==""{
                doedit `"`PATH'\`pkgname'.do"'
            }
        
            return local  adofile   `"`PATH'\`pkgname'.do"'   
            exit
        }              
        

    } 
    
    dis ""
	dis as text "the following files will be replaced:"
	dis as text _col(5)  `"{stata "doedit `PATH'\`pkgname'.do":{bf:`PATH'\`pkgname'.do}}"' 	 _n
    dis as text "installing into `PATH'..."
    
    cap copy  "`URL'`pkgname'.do"   "`PATH'\`pkgname'.do" ,replace                     
    
    if "`no'"==""{
        doedit `"`PATH'\`pkgname'.do"'
    }
    return local adofile   `"`PATH'\`pkgname'.do"'  
       
end