<?php


    class alternatywy
    {

        public static $sql_table = 'alternatywy';

        public static $own_listing = false;
        public static $own_listing_parse = false;
        public static $own_options = true;
        
        public function __construct()
        {
        }

        
        public static function get( $id )
        {
           $data = db::$i->row("
           SELECT * 
           FROM `".( self::$sql_table )."` 
           WHERE `id`='".( $id )."'
           ");
           
           if( !$data ) return;
           
            return core::object( $data );
        }


        public static function edit( $request , $id , $ImageFile = false )
        {
            
            $Obj = self::get( $id );
            
            if( !$Obj->id )
            {
                statement::$i->set( 'Element o takim identyfikatorze nie istnieje w bazie danych' , 'danger' );
                return;
            }
            
            // Nazwa
            if( !empty( $request['nazwa'] ) AND $request['nazwa'] != $Obj->nazwa )
            {
                $sql['nazwa'] = esc( $request['nazwa'] );
            }
            
            if( $ImageFile )
            {
                $UploadedImage = file::upload( $ImageFile );
                if( $UploadedImage )
                {
                    $sql['image'] = $UploadedImage;
                }
            }
            
            if( count( $sql ) )
            {
                if( db::$i->update( self::$sql_table , $sql , $id ) )
                {
                    statement::$i->set( 'update' );
                } 
                else 
                {
                    statement::$i->set( 'mysql' );
                }
            } 
            else 
            {
                statement::$i->set( 'Nie dokonano żadnych zmian' );
            }
            
        }
                        
        /**
         * Pobierz listę alternatyw
         * @param int $TematId
         * @return object $Alternatywy
         */
        public static function getList( $TematId , $ProcesId = false , $Wartosci = array() )
        {
            
            $where[] = "`temat_id`='".( $TematId )."'";
            
            if( $ProcesId > 2 )
            {
                //$where[] = "( `proces_id`='".( $ProcesId )."' OR `proces_id` IS NULL )";
                $where[] = "( `proces_id`='".( $ProcesId )."' )";
            } 
            else 
            {
                $where[] = "`proces_id` IS NULL";
            }
            
            $query = db::$i->q("
            SELECT * 
            FROM `".( self::$sql_table )."` 
            WHERE ".( join( ' AND ' , $where ) )." 
            ORDER BY `id` ASC
            " , true );

            
            if( db::$i->rows )
            {
                $Alternatywy = new stdClass;
                $Alternatywy->Count = db::$i->rows;
                
                while( $Alternatywa = db::$i->f( $query ) )
                {
                    if( $ProcesId )
                    {
                        $Alternatywa['proces_id'] = $ProcesId;
                    }
                    $Alternatywy->Items[] = self::parse( $Alternatywa , $Wartosci );
                }
                    
                    return $Alternatywy;
            } 
            
                return;
        }
        
        public static function parse( $item , $Wartosci = array() )
        {
            $item['kryteria'] = kryteria::getList( $item['temat_id'] , $item['id'] , ( $item['proces_id'] > 2 ? $item['proces_id'] : false ) , $Wartosci );
            return core::object( $item );
        }
        
        public static function add( $request , $ImageFile = false )
        {
            
            // Nazwa
            if( empty( $request['nazwa'] ) )
            {
                statement::$i->set( l('Podaj nazwę') , 'danger' );
                return;
            }
            
            $sql['nazwa'] = $request['nazwa'];
            
            // Temat
            if( empty( $request['temat_id'] ) )
            {
                statement::$i->set( l('Wybierz temat ') , 'danger' );
                return;
            }
            
            $sql['temat_id'] = $request['temat_id'];
            
            if( $ImageFile )
            {
                $UploadedImage = file::upload( $ImageFile );
                if( $UploadedImage )
                {
                    $sql['image'] = $UploadedImage;
                }
            }

            $sql['proces_id'] = ( isset( $request['proces_id'] ) ? $request['proces_id'] : null );

            
            if( db::$i->insert( self::$sql_table , $sql ) )
            {
                statement::$i->set( 'save' );
                    return true;
            } 
            else 
            {
                statement::$i->set( 'mysql' );
            }
        }
        
        public static function CreateRanking( $Alternatywy , $Wagi = false )
        {
            if( !$Wagi OR !count( $Wagi ) )
            {
                $Wagi = array();
            }
            
            // Grupowanie kryteriów
            foreach( $Alternatywy as $alternatywa => $kryteria )
            {
                
                foreach( $kryteria as $kryterium => $wartosc )
                {
                    $second[$kryterium][] = $wartosc;
                }
            }
            
            // Ustalanie max dla określonych kryteriów
            foreach( $second as $kryterium => $wartosci )
            {
                $KryteriaMax[$kryterium] = max( $wartosci );
            }
        
            // Normalizowanie wartosci
            foreach( $Alternatywy as $alternatywa => $kryteria )
            {
                
                foreach( $kryteria as $kryterium => $wartosc )
                {
                    $Alternatywy[$alternatywa][$kryterium] = 100/$KryteriaMax[$kryterium] * $wartosc * ( $Wagi[$kryterium] ? $Wagi[$kryterium] : 1 );
        
                }
            }
            
            // Podliczanie sumy wazonej?
            $ForeachRands = 'a';
            foreach( $Alternatywy as $alternatywa => $KrytArray )
            {
                if( isset( $summary[array_sum( $KrytArray )] ) )
                {
                    $summary[array_sum( $KrytArray ).$ForeachRands] = $alternatywa;
                    
                    if( $ForeachRands == 'a' )
                    {
                        $ForeachRands = 'b';
                    } 
                    elseif( $ForeachRands == 'b' ) 
                    {
                        $ForeachRands = 'c';
                    }
                }
                else 
                {
                    $summary[array_sum( $KrytArray )] = $alternatywa;
                }
            }
            
            krsort( $summary );
            
                $AlternatywyLista = new stdClass;
                $AlternatywyLista->Count = count( $summary );
                
                foreach( $summary as $suma_wazona => $alternatywa )
                {
                    $Alt = self::get( $alternatywa );
                    $Alt->suma_wazona = str_replace( array('a','b','c','d') , '' , $suma_wazona );
                    $AlternatywyLista->Items[] = $Alt;
                }
            
                return $AlternatywyLista;
        }
        
        
   
           
        public static function options( $item )
        {
                /*
                $options[l('Szczegóły')] = array(
                        'mode' => 'alternatywy',
                        'data-id' => $item['id'],
                        'id' => $item['id'],
                        'class' => 'row_details'
                );
                */
                
                $options[l('Edytuj')] = array(
                        'mode' => 'alternatywy',
                        'id' => $item['id']
                );

                                                
                $options[l('Usuń')] = array(
                        'mode' => 'alternatywy',
                        'id' => $item['id']
                );
                
                return $options; 
        }   
        
        public static function details_parse()
        {
            
        }
        
    }
    
?>