<?php

include_once(dirname(__FILE__).'/Export.php');

class ExportAddon extends Export
{
  
  // Replace special codes by lua functions
  function ReplaceVarInText($string)
  {
    $string = str_replace('$N', '"..strlower(UnitName("player")).."', $string);
    $string = str_replace('$n', '"..strlower(UnitName("player")).."', $string);
    $string = str_replace('$C', '"..strlower(UnitClass("player")).."', $string);
    $string = str_replace('$c', '"..strlower(UnitClass("player")).."', $string);
    $string = str_replace('$R', '"..strlower(UnitRace("player")).."', $string);
    $string = str_replace('$r', '"..strlower(UnitRace("player")).."', $string);
    $Gender = '$G';
    while(strpos($string, $Gender) !== false) 
    {
      $Before = substr($string, 0, strpos($string, $Gender));
      $Man = substr($string, strpos($string, $Gender) + 2);
      $Woman = substr($Man, strpos($Man, ':') + 1);
      $After = substr($Woman, strpos($Woman, ';') + 1);
      $Man = substr($Man, 0, strpos($Man, ':'));
      $Woman = substr($Woman, 0, strpos($Woman, ';'));
      $Man = str_replace(' ', '', $Man);
      $Woman = str_replace(' ', '', $Woman);
      $string = $Before.'"..gsub(gsub(UnitSex("player"), "^2$", "'.$Man.'"), "^3$", "'.$Woman.'").."'.$After;
    } 
    $Gender = '$g';
    while(strpos($string, $Gender) !== false) 
    {
      $Before = substr($string, 0, strpos($string, $Gender));
      $Man = substr($string, strpos($string, $Gender) + 2);
      $Woman = substr($Man, strpos($Man, ':') + 1);
      $After = substr($Woman, strpos($Woman, ';') + 1);
      $Man = substr($Man, 0, strpos($Man, ':'));
      $Woman = substr($Woman, 0, strpos($Woman, ';'));
      $Man = str_replace(' ', '', $Man);
      $Woman = str_replace(' ', '', $Woman);
      $string = $Before.'"..gsub(gsub(UnitSex("player"), "^2$", "'.$Man.'"),"^3$", "'.$Woman.'").."'.$After;
    } 

    $string = str_replace('$', '', $string);
    $string = str_replace("\r", '', $string);
    $string = str_replace("\n", '\r\n', $string);
    return($string);    
  }

  function ReplaceEnText($string)
  {
    //  $string = mysql_escape_string($string);
    $string = strtolower($string);
  
    $string = str_replace('"', '\"', $string);
    $string = str_replace('$b$b', ' ', $string);  
    $string = str_replace('$b $b', ' ', $string);   
    $string = str_replace('$b', ' ', $string);  
    $string = $this->ReplaceVarInText($string);  
    while(strpos($string, '  ')) 
      $string = str_replace('  ', ' ', $string);
    return($string);
  }

  function ReplaceCzText($string)
  {
    $string = $this->Database->real_escape_string($string);
    $string = str_replace('$B', '\r\n', $string);
    $string = str_replace('$b', '\r\n', $string); 
    $string = $this->ReplaceVarInText($string);
    return($string);
  }

  function NotCancel($string)
  {
    //echo (strpos($string,'<html>'));
    if (strpos($string,'<html>') > -1) return(false);
      else return(true);
  }

  function my_trim($string)
  {
    $string = addslashes($string);
    $string = str_replace("\n", '\r\\'."\n",$string);
    $string = str_replace("\r", '',$string);
    $string = str_replace("\\\\\\", '\\\\',$string);
    $string = str_replace("\\\\\\", '\\\\',$string);
    $string = str_replace("\\\\\\", '\\\\',$string);
    $string = str_replace("\\\\32", '\\32',$string);
    $string = str_replace('\\\\"', '\\"',$string);
    $string = str_replace('\\\\n', '\\n',$string);
    $string = str_replace('\\\\124', '\\124',$string);

    return ($string);
  }

  function MakeLanguageFiles()
  {
    global $TranslationTree, $CreatedFileList;
   
    $Output = '';
    $this->LoadFilters();
    
    $CreatedFileList = array();
    $CreatedFileListCount = array();
    
    if(!file_exists($this->TempDir.'CzWoW/')) mkdir($this->TempDir.'CzWoW/', 0777, true);
  
    $DbResult = $this->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$this->Id.' AND `Group`.`TablePrefix` != ""');
    while($Group = $DbResult->fetch_assoc())
    {
    //získání čísla verze pro export
      $ID = $this->Database->query('SELECT LastVersion FROM `Group` WHERE Id = '.$Group['Id']); 
      $LastVersion = $ID->fetch_assoc();
      
      if ($LastVersion['LastVersion'] < $this->ClientVersion['BuildNumber'])
        $ExportVersion = $LastVersion['LastVersion'];
      else $ExportVersion = '';

      foreach($TranslationTree[$Group['Id']]['Items'] as $Column)
      if($Column['AddonFileName'] != '')  
      {
        if(!isset($CreatedFileListCount[$Column['AddonFileName']])) 
        $CreatedFileListCount[$Column['AddonFileName']] = 0;
        $CreatedFileListCount[$Column['AddonFileName']]++;
        $FileIndex = $CreatedFileListCount[$Column['AddonFileName']];
    
        $CreatedFileList[] = $Column['AddonFileName'].'_'.$FileIndex;
        $FileName = $this->TempDir.'CzWoW/'.$Column['AddonFileName'].'_'.$FileIndex.'.lua';        
        $Output .= $Column['AddonFileName'].': ';
        $i = 0;

        $Buffer = 'CZWOW_'.$Column['AddonFileName'].'_count='.$FileIndex.';CZWOW_'.$Column['AddonFileName'].'_'.$FileIndex.'={';
    
        $DbResult2 = $this->Database->query($this->BuildQuery($Group,'',$ExportVersion));
        
        while($Line = $DbResult2->fetch_assoc()) 
        {
          $en = trim($this->ReplaceEnText($Line['En'.$Column['Column']]));  
          $cz = $this->ReplaceCzText($Line[$Column['Column']]);
          if(($en <> '') and ($cz <> '') and ($this->NotCancel($en))) 
          {
            $Buffer .= "\n".'["'.$en.'"]="'.$cz.'",';
            $i++;
          }
        }
    
        $Buffer = $Buffer."\n};if not CZWOW_".$Column['AddonFileName']." then CZWOW_".$Column['AddonFileName']."=0; end; CZWOW_".$Column['AddonFileName']."=CZWOW_".$Column['AddonFileName']."+".$i.";\n";

        file_put_contents($FileName, $Buffer);
        $Output .= '<b>Hotovo</b><br />';
      }
    }


    // Generete list file of translated
    $CountFiles = 'CountFiles.lua';
    $Buffer = '';
    foreach($CreatedFileList as $CreatedFile)
      $Buffer .= 'CZWOW_'.str_replace('_','_count=',$CreatedFile).';'."\n"; 
    foreach($TranslationTree as $Group)
      foreach($TranslationTree[$Group['Id']]['Items'] as $Column)
      if (($Column['AddonFileName'] != '') and (!in_array($Column['AddonFileName'].'_1', $CreatedFileList))) 
      {
        $Buffer .= 'CZWOW_'.$Column['AddonFileName'].'_count=0;'."\n"; 
    }
    
    file_put_contents($this->TempDir.'CzWoW/'.$CountFiles, $Buffer);
  
  
    // Generate file Translates.xml
    $Buffer = '<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/.\FrameXML\UI.xsd">'."\n";
    $Buffer .= '<script file="'.$CountFiles.'"/>'."\n";
    foreach($CreatedFileList as $CreatedFile)
      $Buffer .= '<script file="'.$CreatedFile.'.lua"/>'."\n";
    $Buffer .= '</Ui>';
    file_put_contents($this->TempDir.'CzWoW/Translates.xml', $Buffer);
    return($Output);
  }


  function MakeClientStrings()
  {
    global $TranslationTree;
  
    $this->LoadFilters();
  
    $Buffer = "local f=function(name, en, cz) CzWoW_interface[name]=cz;CzWoW_interface_entoname[en]=name; end; CzWoW_interface={};CzWoW_interface_entoname={ };\n";
    $Group = $TranslationTree[14]; // client table
    $Column['Column'] = 'Text';
    
    $DbResult = $this->Database->query('SELECT `Group`.* FROM `ExportGroup` JOIN `Group` ON `Group`.`Id` = `ExportGroup`.`Group` WHERE `ExportGroup`.`Export`='.$this->Id.' AND `Group`.`TablePrefix` != "" AND `Group`.`Id` = 14');
    //$Group = $DbResult->fetch_assoc();
    if ($DbResult->num_rows == 0)
      $CanGenerated = '-1';
    else
      $CanGenerated = '';
    
    $DbResult = $this->Database->query($this->BuildQuery($Group,'',$CanGenerated));
    while($Line = $DbResult->fetch_array()) 
    {
      $Original = $this->my_trim($Line['En'.$Column['Column']]);
      $Translated = $this->my_trim($Line[$Column['Column']]);
      if($this->ClientVersion['Version'] == '2.4.3') 
      {
        $Original = str_replace("|Hchannel:%d|h[%s]|h", '[%s]', $Original);
        $Translated = str_replace("|Hchannel:%d|h[%s]|h", '[%s]', $Translated);
      }
      $Buffer .= 'f("'.addslashes($Line['ShortCut']).'", "'.$Original.'","'.$Translated.'");'."\n";
    }

    if(!file_exists($this->TempDir.'CzWoW/')) mkdir($this->TempDir.'CzWoW/',0777, true);
    file_put_contents($this->TempDir.'CzWoW/LocalizationStrings.lua', $Buffer);
  }

  function MakeAddon()
  {
    if(!file_exists($this->TempDir)) mkdir($this->TempDir, 0777, true);
    $Output = $this->MakeLanguageFiles();
    $Output .= $this->MakeClientStrings();
    // $Output .= MakeMainScript($Setting);
    return($Output);
  }

  function MakeReadme()
  {
    $DbResult = $this->Database->query('SELECT * FROM `CzWoWPackageVersion` ORDER BY `Date` DESC');
    $Line = $DbResult->fetch_assoc();

    $Buffer = '
 Čeština pro klienty:
  Vytvořeno v projektu http://wowpreklad.zdechov.net/ 
  Obsahuje Fonty pro správné zobrazování českých znaků, WoW addon překládající
texty
  
 Instalace:
  Soubory rozbalte/zkopírujte do kořenové složky s hrou. Obvikle bývá
"C:/Program Files/World of Warcraft/".
  
 Verze:
  Verze Addonu: '.$Line['Version'].' 
  Tato verze je pro verzi hry '.$this->ClientVersion['Version'].'
  
 Změny ve verzích:
  
    ';
    $DbResult = $System->Database->query('SELECT * FROM `CzWoWPackageVersion` ORDER BY `Date` DESC');
    while($Line = $DbResult->fetch_assoc()) 
    {
      $Buffer .='
  Verze: '.$Line['Version'].' 
  =============
  '.$Line['text'].'
  
  ';
    }
    file_put_contents($this->TempDir.'CZWOW-Readme.txt', $Buffer);
  }
}
