<?php
function module_name_here_getConfig()
{
    return [
        "name"=>"module_title_here",
        "description"=>"module_description_here",
        "version"=>"1.0",
        "author"=>"module_author_here",
        "author_url"=>"module_author_url_here",
        "configs"=>[
        "Token" => [
            "Name"=>"API Token",
            "Type" => "text", 
            "Size" => "20", 
            "DivColumns"=>"12",
            "Description" => "Enter your API Token here"
           ]
        ]
    ];
}
function module_name_here_call($act="",$post=[],$params=[])
{
    $post["token"] = $params["Token"];
    if(!isset($post["domain_name"]))
    {
        $post["domain_name"] = $params["sld"] . "." . $params["tld"];
    }
    if(array_key_exists("is_domain_name",$post))
    {
        if($post["is_domain_name"] === false) unset($post["domain_name"]);
    }
    $curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://module_api_url_here/rapi/'.$act,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_TIMEOUT => 15,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_SSL_VERIFYHOST => false,
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>$post,
    ));
    $response = curl_exec($curl);
    curl_close($curl);
    return json_decode($response,true);
}
function module_name_here_GetTldPricing($params)
{
    $response = module_name_here_call("GetTLDPricing",["is_domain_name"=>false],$params);
    if($response["status"] == "error")
    {
        $response["data"] = [];
        return $response;
    }
    $datas = $response["data"];
    if(empty($datas)) return ["status"=>"error","message"=>"TLDs & Prices not found","data"=>[]];
    $results = [];
    foreach ($datas as $tld =>$extension)
    {
        $RegisterPrice = 0;
        $RenewPrice = 0;
        $TransferPrice = 0;
        $Pricing = $extension["Pricing"];
        foreach ($Pricing as $pk => $prices)
        {
            $RegisterPrice = $prices["Register"];
            $RenewPrice = $prices["Transfer"];
            $TransferPrice = $prices["Renewal"];
        }
        $results[$tld] = [
                    "Tld"=>$extension['name'],
                    "MinYears"=>$extension['duration'],
                    "MaxYears"=>10,
                    "RegisterPrice"=>$RegisterPrice,
                    "RenewPrice"=>$RenewPrice,
                    "TransferPrice"=>$TransferPrice,
                    "GraceFeeDays"=>$extension['gracePeriodDuration'],
                    "GraceFeePrice"=>$extension['gracePeriodFee'],
                    "RedemptionFeeDays"=>$extension['redemptionPeriodDuration'],
                    "RedemptionFeePrice"=>$extension['redemptionPeriodFee'],
                    "Currency"=>$extension['currencyCode']
                ];            
    }
    return ["status"=>"success","message"=>"","data"=>$results];
}
function module_name_here_Sync($params)
{
    $response = module_name_here_call("GetClientDomains",[],$params);
    if($response["status"] == "error") return $response;
    $Result = $response["data"]["Result"];
    $expirydate = $Result[0]["expirydate"];
    $status = $Result[0]["status"];
    return [
        'status'=>'success',
        'response'=>[
        'expirydate' => $expirydate,
        'active' => ($status == 'Active') ? true:false,
        'expired' => (in_array($status,['Expired','Redemption'])) ? true:false,
        'transferredAway' => ($status == 'Transferred Away') ? true:false,
        ]
    ];
}
function module_name_here_TransferSync($params)
{
    $response = module_name_here_call("DomainRequestEPP",[],$params);
    if($response["status"] == "error") return $response;
    $response = module_name_here_call("GetClientDomains",[],$params);
    if($response["status"] == "error") return ["status"=>"error","message"=>"Domain information not found"];
    $Result = $response["data"]["Result"];
    $expirydate = $Result[0]["expirydate"];
    $status = $Result[0]["status"];
    if($status == "Pending Transfer") return ['completed'=>false,'reason'=>$status,'failed' => false];
    if($status == "Cancelled") return ['completed'=>false,'reason'=>'Cancelled by Client','failed'=>true];
    if($status == "Active") return ['completed'=>true,'expirydate'=>$expirydate,'failed'=>false];
    return [];
}
function module_name_here_GetEPPCode($params)
{
    $response = module_name_here_call("DomainRequestEPP",[],$params);
    if($response["status"] == "error") return $response;
    return ['status'=>'success','response'=>$response["data"]["code"]];
}
function module_name_here_CheckAvailability($arg)
{
    $sld = $arg['sld'];
    $results = [];
    foreach ($arg['tlds'] as $tld)
    {
        $domain = $sld.$tld;  
        $premiumEnabled = $arg['premiumEnabled'];   
        $checkRs = module_name_here_call("DomainSearch",["domain_name"=>$domain],$arg);
        if($checkRs["status"] == "success")
        {
            $results[$tld]["status"] = "available";
            if ($checkRs['data']['status'] == "REGISTERED")
            {
                $results[$tld]["status"] = "registered";
                $results[$tld]["premium"] = false;
                $results[$tld]["whois"] = $checkRs["data"]["whois"];
            }else{
                $results[$tld]["whois"] = [];
                if ($checkRs['data']['IsPremiumDomain'] && $premiumEnabled)
                {
                    $results[$tld]["premium"] = true;
                    $results[$tld]["premium"]["isAvailableForPurchase"] = true;
                    $results[$tld]["premium"]["prices"] = [
                        "register"=>$checkRs['data']['price'],
                        "renew"=>$checkRs['data']['price'],
                        "CurrencyCode"=>"USD"
                    ];
                }
            }
        }else{
            $results[$tld]["status"] = "error";
            $results[$tld]["message"] = $checkRs["message"];            
        }
    }
    return $results;
}
function module_name_here_GetDomainInformation($params)
{
    $response = module_name_here_call("GetClientDomains",[],$params);
    if($response["status"] == "error") return $response;
    $Result = $response["data"]["Result"][0];
    $registrationdate = $Result["registrationdate"];
    $expirydate = $Result["expirydate"];
    $name_servers = $Result["name_servers"];
    return [
        'status'=>'success',
        'response'=>[
            'domain'=>$params["sld"].".".$params["tld"],
            'regdate'=>$registrationdate,
            'expdate'=>$expirydate,
            'lockstatus'=>$Result['registrarlock'],
            'nameservers'=>[
                'ns1'=>$name_servers['ns1'],
                'ns2'=>$name_servers['ns2'],
                'ns3'=>$name_servers['ns3'],
                'ns4'=>$name_servers['ns4'],
                'ns5'=>$name_servers['ns5'],
            ]
        ]
    ];
}
function module_name_here_GetNameservers($params)
{
    $response = module_name_here_call("DomainGetNameservers",[],$params);
    if($response["status"] == "error") return $response;
    $arr = $response["data"];
    return ['status'=>'success',
        'response'=>["ns1" => $arr["ns1"], "ns2" => $arr["ns2"], "ns3" => $arr["ns3"], "ns4" => $arr["ns4"], "ns5" => $arr["ns5"]]];
}
function module_name_here_SaveNameservers($params)
{
    $postfields = [];
    $postfields["ns1"] = $params["ns1"];
    $postfields["ns2"] = $params["ns2"];
    $postfields["ns3"] = $params["ns3"];
    $postfields["ns4"] = $params["ns4"];
    $postfields["ns5"] = $params["ns5"];
    $response = module_name_here_call("DomainUpdateNameservers",$postfields,$params);
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}
function module_name_here_GetRegistrarLock($params)
{
    $response = module_name_here_call("DomainGetLockingStatus",[],$params);
    if($response["status"] == "error") return $response;
    $locked = $response["data"]["locked"];
    $lockstatus = $locked == 1 ? "locked":"unlocked";
    return ['status'=>'success','response'=>$lockstatus];
}
function module_name_here_SaveRegistrarLock($params)
{
    $postfields = [];
    $postfields["lock_status"] = $params["lockenabled"] == "locked" ? "Yes":"No";
    $response = module_name_here_call("DomainUpdateLockingStatus",$postfields,$params);
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}
function module_name_here_RegisterDomain($params)
{
    $postfields = [];
    $postfields["duration"] = $params["regperiod"];
    $postfields["ns1"] = $params["ns1"];
    $postfields["ns2"] = $params["ns2"];    
    $postfields["company"] = $params["companyname"];
    $postfields["fname"] = $params["firstname"];
    $postfields["lname"] = $params["lastname"];
    $postfields["addr1"] = $params["address1"];
    $postfields["addr2"] = $params["address2"];
    $postfields["state"] = $params["state"];
    $postfields["city"] = $params["city"];
    $postfields["postcode"] = $params["postcode"];
    $postfields["telephone"] = $params["fullphonenumber"];
    $postfields["country"] = $params["country"];
    $postfields["email"] = $params["email"];
    $response = module_name_here_call("DomainRegister",$postfields,$params);
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}
function module_name_here_TransferDomain($params)
{
    $postfields = [];
    $postfields["duration"] = $params["regperiod"];
    $postfields["eppcode"] = $params["transfersecret"];
    $postfields["company"] = $params["companyname"];
    $postfields["fname"] = $params["firstname"];
    $postfields["lname"] = $params["lastname"];
    $postfields["addr1"] = $params["address1"];
    $postfields["addr2"] = $params["address2"];
    $postfields["state"] = $params["state"];
    $postfields["city"] = $params["city"];
    $postfields["postcode"] = $params["postcode"];
    $postfields["telephone"] = $params["fullphonenumber"];
    $postfields["country"] = $params["country"];
    $postfields["email"] = $params["email"];
    $response = module_name_here_call("DomainTransfer",$postfields,$params);
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}
function module_name_here_RenewDomain($params)
{
    $postfields = [];
    $postfields["duration"] = $params["regperiod"];
    $response = module_name_here_call("DomainRenew",$postfields,$params);
    if($response["status"] == "error") return $response;
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}
function module_name_here_GetContactDetails($params)
{
    $postfields = [];
    $response = module_name_here_call("DomainGetWhoisInfo",[],$params);
    if($response["status"] == "error") return $response;
    $data = $response["data"];
    return ['status'=>'success','response'=>$data];
}
function module_name_here_SaveContactDetails($params)
{
    $postfields = [];
    $postfields["whois_info"] = json_encode($params["contactdetails"]);
    $response = module_name_here_call("DomainUpdateWhoisInfo",$postfields,$params);
    return ($response["status"] == "error") ? $response:['status'=>'success'];
}