/* WCMeaning.java - A part of word card corresponds to a Definition (meaning) part
 * of a page (entry) in Wiktionary.
 *
 * Copyright (c) 2009-2012 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
 * Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
 */

package wikokit.kiwidict.word_card;

import wikokit.base.wikt.sql.TLang;
import wikokit.base.wikt.sql.TMeaning;
import wikokit.base.wikt.sql.TTranslation;
import wikokit.base.wikt.sql.TWikiText;
import wikokit.kiwidict.KWConstants;
import wikokit.kiwidict.util.GUI;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

/** Meaning consists of word's definitions, semantic relations and translations.
*
* @see wikt.api.WTMeaning and 
*/
public class WCMeaning {
    
    /** Quotes of this meaning of current word. */ 
    // WCQuote[] quote;
    
    
    /** Gets text with a definition, meaning, sense description. 
    *
    * @param _max_meaning_number total number of different meanings for the current
    *                      POS-language sub-entry
    */
   public String createDefinitionText(TMeaning _tmeaning, int _max_meaning_number) {
       String s_debug = "";
       String result = "";
       
       // Meaning (sense) number.
       int meaning_n = _tmeaning.getMeaningNumber();
       
       if(KWConstants.DEBUGUI)
           s_debug = "; meaning.id=" + _tmeaning.getID() + 
                   "; meaning _n/max=" + (meaning_n+1) + "/" + _max_meaning_number;
       
       // 1.a Definition
       // numbering logic: if only one definition then without number 1.
       String s_number = "";
       if(_max_meaning_number > 1)
           s_number = String.format("%d. ", meaning_n + 1);

       TWikiText twiki_text = _tmeaning.getWikiText();
       if(null != twiki_text)
           result = s_number + twiki_text.getText() + s_debug;
       
       return result;
   }
    
    
    /** Creates a Meaning part of card (parts of wiki pages),
     * builds visual block with this language.
     *
     * @param _max_meaning_number total number of different meanings for the current
     *                      POS-language sub-entry
     *                      
     * @see Dynamic Layout Basics http://android.attemptone.com/layouts/dynamic-layout-basics/
    **/
    public LinearLayout create( SQLiteDatabase db,
                        Activity _context,
                        TMeaning _tmeaning,
                        Integer _max_meaning_number,
                        TLang _lang,
                        TTranslation[] _ttranslations
                      )
    {
        LayoutParams mpwc = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1);
        
        // meaning_gap between meanings
        LayoutParams mpwc_top_margin = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1);
        mpwc_top_margin.setMargins(0, GUI.ConvertPixelsToDP(_context, KWConstants.meaning_gap), 0, 0); // .setMargins(left, top, right, bottom);

        LinearLayout result_layout = new LinearLayout(_context);
        
        result_layout.setOrientation(LinearLayout.VERTICAL);
        result_layout.setGravity(Gravity.TOP);
        result_layout.setLayoutParams(mpwc);
        
        
        // 1. definition
        TextView text_definition = new TextView(_context); 
        text_definition.setLayoutParams(mpwc);
        // text_definition.setTextIsSelectable(true); // "Since: API Level 11". API 11 is 3.0 (Honeycomb)
        
        text_definition.setTextSize(TypedValue.COMPLEX_UNIT_SP, KWConstants.text_size_normal);
        text_definition.setTextColor(KWConstants.definition_color);

        text_definition.setLayoutParams(mpwc_top_margin);
        text_definition.setGravity(Gravity.TOP);
        
        String _def_text = createDefinitionText(_tmeaning, _max_meaning_number);
        text_definition.setText(_def_text);
        result_layout.addView(text_definition);
        
        
        
        
        // 1.b Quote
        WCQuote _quote = new WCQuote();
        LinearLayout ll_quote = _quote.create(_context, db, _tmeaning);
        if(null != ll_quote)
            result_layout.addView(ll_quote);
            

        // 2. Semantic relations.
        WCRelation _relation = new WCRelation();        
        LinearLayout ll_relation = _relation.create(_context, db, _tmeaning);
        if(null != ll_relation)
            result_layout.addView(ll_relation);
        

        // Meaning (sense) number.
        Integer meaning_n = _tmeaning.getMeaningNumber();

        // 3. Translations.
/*        translation = null;
        if(_ttranslations.length > meaning_n) {
            TTranslation tt = _ttranslations[meaning_n];// only one translation block, for the current meaning

            WCTranslation _translation = new WCTranslation();
            if(_translation.create(conn, tt, _lang)) {   // if there are any translation entries in the block
                translation = _translation;                                 // logic
                translation_group.getChildren().addAll(_translation.group);  // visual
            }
        }
        
        // Visualize results
        quote_group.setSpacing(10);
        relation_group.setSpacing(2);
        translation_group.setSpacing(1);
        
        group_mrt.getChildren().addAll(text_definition);
        
        if(bquote)
            group_mrt.getChildren().addAll(quote_group);
        
        if(relation.length > 0)         // if there are any synonyms, antonyms, etc.
            group_mrt.getChildren().addAll(relation_group);
        
        if(null != translation)
            group_mrt.getChildren().addAll(translation_group);
        
        group_mrt.setSpacing(8);
        */
        
        return result_layout;
    }

}
