<?php
use COREPOS\Fannie\API\FanniePlugin;
if (!class_exists('FpdfWithBarcode')) {
    include(dirname(__FILE__) . '/../FpdfWithBarcode.php');
}
if (!class_exists('FannieAPI')) {
    include(__DIR__ . '/../../classlib2.0/FannieAPI.php');
}
if (!class_exists('FpdfLib')) {
    include(dirname(__FILE__) . '/FpdfLib.php');
}

class Single_WFC_Produce_SmartSigns_PDF extends FpdfWithBarcode
{
    private $tagdate;
    public function setTagDate($str){
        $this->tagdate = $str;
    }

    public function barcodeText($x, $y, $h, $barcode, $len)
    {
        $this->SetFont('Arial','',8);
        $this->Text($x,$y-$h+(17/$this->k),substr($barcode,-$len).' '.$this->tagdate);
    }

}

function Single_WFC_Produce_SmartSigns($data,$offset=0,$showPrice=0)
{
    $dbc = FannieDB::get(FannieConfig::config('OP_DB'));
    $pdf = new Single_WFC_Produce_SmartSigns_PDF('P','mm', array(148, 105));
    $pdf->AddPage("L", "A6");
    $pdf->SetTextColor(0, 0, 0);
    $pdf->SetFillColor(255, 255, 255);

    $pdf->AddFont('Gill', '', 'GillSansMTPro-Medium.php');
    $pdf->AddFont('Gill', 'B', 'GillSansMTPro-Heavy.php');
    $pdf->SetFont('Gill','B', 16);

    $width = 96;
    $height = 62;
    $left = 10;
    $top = 15;
    $guide = 0.3;

    $x = $left+$guide; $y = $top+$guide;

    $pdf->SetTopMargin($top);
    $pdf->SetLeftMargin($left);
    $pdf->SetRightMargin($left);
    $pdf->SetAutoPageBreak(False);

    $i = 0;
    $tagNo = 0;
    foreach($data as $k => $row){
        $lc = false;
        $upc = $row['upc'];
        if (isset($row['likeCode']))
            $lc = $row['likeCode'];
        if ($i % 2 == 0 && $i != 0) {
            $pdf->AddPage('L');
            $x = $left;
            $y = $top;
            $i = 0;
        }
        if ($i == 0) {
            $pdf = generateSingle_WFC_Produce_SmartSigns_label($x, $y, $guide, $width, $height, $pdf, $row, $dbc, $showPrice, $offset, $tagNo, $lc);
        }  else if ($i % 1 == 0 && $i != 0) {
            $x = $left+$guide;
            $y += $height+$guide;
        } else {
            $x += $width+$guide-15;
        }
        $pdf = generateSingle_WFC_Produce_SmartSigns_label($x, $y, $guide, $width, $height, $pdf, $row, $dbc, $showPrice, $offset, $tagNo, $lc);
        $i++;
        $tagNo++;
    }

    $pdf = $pdf->Output();
}

function generateSingle_WFC_Produce_SmartSigns_label($x, $y, $guide, $width, $height, $pdf, $row, $dbc, $showPrice, $offset, $tagNo, $lc)
{
    $pdf->SetFont('Gill','', 16);
    if (!defined('FPDF_FONTPATH')) {
        define('FPDF_FONTPATH', __DIR__. '/../../../modules/plugins2.0/CoopDealsSigns/noauto/fonts/');
    }
    $signage = new COREPOS\Fannie\API\item\FannieSignage(array());
    $upc = $row['upc'];
    $price = $row['normal_price'];

    $descFontSize = 26;
    $descFontSizeBig = 24;
    $rgb = array();

    /*
    $lc = false;
    */
    $likeCodes = FormLib::get('lc', false);
    $lcIndex = -1;
    if ($lc !== false) {
        $lcIndex = array_search($lc, $likeCodes);
    }
    $formOrigin = false;
    $overOrigins = FormLib::get('origin', false);
    if (isset($overOrigins[$lcIndex])) {
        $formOrigin = $overOrigins[$lcIndex];
    }
    $formPrice = FormLib::get('price', false);
    if (isset($rPrice[$lcIndex])) {
        $formPrice = $formPrice[$lcIndex];
    }

    $formPage = FormLib::get('form_page', false);
    $formScale = FormLib::get('scale', null);
    if ($formPage != 'ManualSignsPage') {
        // Use Like Code Batch Page index
        if (isset($formScale[$lcIndex])) {
            $formScale = $formScale[$lcIndex];
        }
    } else {
        // Use Manual Signs Page index
        if (isset($formScale[$tagNo])) {
            $formScale = $formScale[$tagNo];
        }
    }

    $formDesc = FormLib::get('desc', false);
    if (isset($formDesc[$lcIndex])) {
        $formDesc = $formDesc[$lcIndex];
    }
    $formOrganic = FormLib::get('brand', false); // [sic]
    if (isset($formOrganic[$tagNo])) {
        $formOrganic = trim($formOrganic[$tagNo]);
    }
    $formLocal = FormLib::get('local', false);
    if (isset($formLocal[$lcIndex])) {
        $formLocal = $formLocal[$lcIndex];
    }
    /*
        Manual Signs Form Data
    */
    $formDescription = FormLib::get('description', false);
    if (isset($formDescription[$tagNo])) {
        $formDescription = $formDescription[$tagNo];
    }


    if ($lc !== false) {
        $lcP = $dbc->prepare("SELECT likeCode, likeCodeDesc, upc, normal_price FROM likeCodeView WHERE likeCode = ? LIMIT 1");
        $lcR = $dbc->execute($lcP, array($lc));
        $lcW = $dbc->fetchRow($lcR);
        //$lcDesc = $lcW['likeCodeDesc'];
    }


    $originNames = array();
    $onP = $dbc->prepare("SELECT originID, fullName FROM originName");
    $onR = $dbc->execute($onP);
    while ($crow = $dbc->fetchRow($onR)) {
        $originNames[$crow['originID']] = $crow['fullName'];
    }

    $originP = $dbc->prepare("SELECT upc, origin FROM upcLike AS u left join likeCodes AS l ON u.likeCode=l.likeCode
        WHERE upc = ? and origin <> '' AND origin IS NOT NULL");
    $originR = $dbc->execute($originP, array($upc));
    while ($originW = $dbc->fetchRow($originR)) {
        $origin = $originW['origin'];
    }

    $pScaleA = array($row['upc']);
    $pScaleP = $dbc->prepare("SELECT scale FROM products WHERE upc = ? LIMIT 1");
    $pScale = $dbc->getValue($pScaleP, $pScaleA);

    $basicP = $dbc->prepare("SELECT
        CASE WHEN pr.priceRuleTypeID = 6 OR pr.priceRuleTypeID = 12 THEN 1 ELSE 0 END
        FROM products AS p
            LEFT JOIN PriceRules AS pr ON p.price_rule_id=pr.priceRuleID
        WHERE upc = ?;");
    $organicLocalP = $dbc->prepare("SELECT 'true' FROM products WHERE numflag & (1<<16) != 0 AND upc = ? AND local > 0");
    $organicP = $dbc->prepare("SELECT 'true' FROM products WHERE numflag & (1<<16) != 0 AND upc = ?");
    $localP = $dbc->prepare("SELECT 'true' FROM products WHERE local > 0 AND upc = ?");

    $item = array();
    $item['basic'] = $dbc->getValue($basicP, $row['upc']);
    $item['organicLocal'] = $dbc->getValue($organicLocalP, $row['upc']);
    $item['organic'] = $dbc->getValue($organicP, $row['upc']);
    $item['local'] = $dbc->getValue($localP, $row['upc']);

    if (isset($formOrganic)) {
        if ($formOrganic != false) {
            if (strToLower($formOrganic) == 'organic') {
                $item['organic'] = true;
            } elseif (strToLower($formOrganic) == 'local organic') {
                $item['organicLocal'] = true;
            } elseif (strToLower($formOrganic) == 'organic local') {
                $item['organicLocal'] = true;
            } elseif (strToLower($formOrganic) == 'local') {
                $item['local'] = true;
            } else {
                $item['organic'] = false;
            }
        }
    }
    
    if ($lc != false) {
        $prep = $dbc->prepare("select organic from likeCodes where likeCode = ?");
        $lcOrganic = $dbc->getValue($prep, array($lc));
        $item['organic'] = $lcOrganic;

        //$prep = $dbc->prepare("select local from products p inner join upcLike u on u.upc=p.upc where u.likeCode = ? GROUP BY p.upc");
        //$lcLocal = $dbc->getValue($prep, array($lc));
        //$item['local'] = $lcLocal;

        //if ($item['local'] > 0 && $item['organic']) {
        //    $item['organicLocal'] = true;
        //}
    }
    if ($formLocal != false) {
        if ($formLocal == 1 || $formLocal == 2) {
            $item['local'] = true;
        }
        if (in_array($formLocal, array(1,2)) && $lcOrganic) {
            $item['organicLocal'] = true;
        }
    }

    // Form Data 
    $updateUpcs = FormLib::get('update_upc');
    $manualDescs = FormLib::get('update_desc');
    $manualOrigins = FormLib::get('update_origin');
    $customOrigins = FormLib::get('custom_origin');
    if (!is_array($updateUpcs)) {
        $updateUpcs = array();
    }
    $updateIndex = array_search($upc, $updateUpcs);
    $originID = isset($manualOrigins[$updateIndex]) ? $manualOrigins[$updateIndex]: '';

    $mOrigin = isset($originNames[$originID]) ? $originNames[$originID] : '';
    $cOrigin = isset($customOrigins[$updateIndex]) ? $customOrigins[$updateIndex]: '';

    if (!isset($origin) && isset($row['originName'])) {
        $origin = $row['originName'];
    }

    $args = array($row['upc']);
    $prep = $dbc->prepare("
        SELECT pu.description, p.scale, p.auto_par, pu.long_text
        FROM productUser AS pu
            INNER JOIN products AS p ON pu.upc=p.upc
        WHERE pu.upc = ?");
    $res = $dbc->execute($prep, $args);
    $row = $dbc->fetchRow($res);

    $MdescKey = array_search($upc, $updateUpcs);
    $Mdesc = $MdescKey !== false ? $manualDescs[$MdescKey] : '';

    if (isset($formDesc)) {
        if ($formDesc != false) {
            $Mdesc = $formDesc;
        }
    }
    if (isset($formDescription)) {
        if ($formDescription != false) {
            $Mdesc = $formDescription;
        }
    }

    $desc = $Mdesc;
    $desc = str_replace("\n", "", $desc);
    $desc = str_replace("\r", "", $desc);
    $par = is_array($row) ? $row['auto_par'] : 0;
    $backText = is_array($row) ? $row['long_text'] : '';

    // get scale info
    $prep = $dbc->prepare("
        SELECT plu
        FROM scaleItems
        WHERE plu = ?");
    $res = $dbc->execute($prep, $args);
    $row = $dbc->fetchRow($res);
    $scale = (is_array($row) && $row['plu'] > 0) ? 1 : 2;

    if ($item['organicLocal']) {
        $pdf->Image(__DIR__ . '/noauto/og-loc.png', $x-2, $y, 80, 15);
        $rgb = array(151,201,61);
    } elseif ($item['organic']) {
        $pdf->Image(__DIR__ . '/noauto/og.png', $x-2, $y, 80, 15);
        $rgb = array(151,201,61);
    } elseif ($item['local']) {
        $pdf->Image(__DIR__ . '/noauto/conv-loc.png', $x-2, $y, 80, 15);
        $rgb = array(72,72,79);
    } else {
        $pdf->Image(__DIR__ . '/noauto/conv.png', $x-2, $y, 80, 15);
        $rgb = array(72,72,79);
    }

    /*
        Add Description Text
        This is the new / bigger size description text
    */

    $desc = str_replace('Organic', '', $desc);

    if (strlen($desc) < 26) {
        // Short Descriptions
        $fontSize = 19;
        $wrapSize = 24;
    } else {
        // Long Descriptions
        $fontSize = 15;
        $wrapSize = 28;
    }

    $lines = array();
    $pdf->SetFont('Gill','', $fontSize);

    if (strstr($desc, "\r\n")) {
        $lines = explode ("\r\n", $desc);
    } else {
        $wrp = wordwrap($desc, $wrapSize, "*", false);
        $lines = explode('*', $wrp);
    }

    $tmpBaseY = 20;
    if (count($lines) == 1) $tmpBaseY = 23;
    foreach ($lines as $i => $line) {
        $j = $tmpBaseY + (10 * $i);
        $pdf->SetXY($x+1, $y+$j);
        $pdf->Cell($width-22, 5, $line, 0, 1, 'C', true);
    }


    $pdf->SetFont('Gill','B', 16);


    $pdf->SetFillColor(255,255,255);

    /*
        Add Price
    */
    $pdf->SetFont('Gill','B', 46);
    $vrbg = ($pScale == 0) ? '/ea' : '/lb';
    if (isset($formScale)) {
        $vrbg = ($formScale == 0) ? '/ea' : '/lb';
    }
    $priceText = '$'.$price.$vrbg;
    $pdf->SetXY($x, $y+38);
    $pdf->Cell($width-22, 10, $priceText, 0, 1, 'C', true);
    //$pdf->Cell($width-22, 10, $lc, 0, 1, 'C', true);

    /*
        Origins Text
    */
    if (isset($origin) || strlen($mOrigin) > 0 || strlen($cOrigin) > 0 || strlen($formOrigin) > 0) {
        if (isset($origin)) 
            $printOrigin = $origin;
        if (strlen($mOrigin) > 0)
            $printOrigin = $mOrigin;
        if (strlen($cOrigin) > 0)
            $printOrigin = $cOrigin;
        $pdf->SetFont('Gill','', 10);
        $pdf->SetXY($x, $y+52);
        if ($formOrigin != false) {
            if (strlen($formOrigin) > 0) {
                $pdf->Cell($width-22, 4, 'Product of ' . $formOrigin, 0, 1, 'C', true);
            }
        } else {
            if (strlen($printOrigin) > 0) {
                $pdf->Cell($width-22, 4, 'Product of ' . $printOrigin, 0, 1, 'C', true);
            }
        }
    }

    /*
        Guide Lines
    */
    $pdf->SetDrawColor(200,200,200);
    $pdf->SetFillColor(200,200,200);

    // print top and left guide lines only once
    if ($y < 20) {
        //top border
        //$pdf->Rect(0, $y-2, $width*3, 0.02, 'DF'); // full line
        $pdf->Rect(0, $y-2, 10, 0.02, 'DF');
        $pdf->Rect($x+$width-21, $y-2, 5, 0.02, 'DF');
    }
    if ($x < 20) {
        // left border
        //$pdf->Rect($x-3.3, 0, 0.02, $height*3+25, 'DF'); // full line
        $pdf->Rect($x-3.3, $y+$height-5, 0.02, 15, 'DF');
        $pdf->Rect($x-3.3, 5, 0.02, 15, 'DF');
    }

    // bottom border
    //$pdf->Rect(0, $y+60, $width*3, 0.02, 'DF'); // full line
    $pdf->Rect(0, $y+60, 10, 0.02, 'DF');
    $pdf->Rect($x+$width-21, $y+60, 5, 0.02, 'DF');

    // right border
    //$pdf->Rect($x+$width-18, 0, 0.02, $height*3+25, 'DF'); // full line
    $pdf->Rect($x+$width-18, 5, 0.02, 15, 'DF');
    $pdf->Rect($x+$width-18, $y+$height-5, 0.02, 15, 'DF');

    $pdf->SetFillColor(255,255,255);

    return $pdf;
}
