#include <printapp.h>
#include <incstr.h>
#include <mask.h>
#include <lffiles.h>
#include <stdio.h>
#include <urldefid.h>
#include <tabutil.h>
#include <utility.h> 

#include "ba6100a.h"
#include "ba6100b.h"

#define M_SET_PRINTER MENU_FILE + 1100
#define M_PRINT MENU_FILE + 1101
#define MENU_TYPE MENU_FILE + 1102

enum pt { undefined = 0, elenco = 1, schede = 2, rubriche = 3, etichette = 4 };
enum pw { anafis = 0, anagiu = 1, nditte = 2 };
enum in { residenza = 1, domfisc = 2, corrispondenza = 3 }; 

bool mask_reset_fields(TMask_field& mf, KEY k);

class TAnaprint_app : public TPrintapp
{
  friend bool mask_reset_fields(TMask_field& mf, KEY k);

  pt _pr_type;
  pw _pr_what;
  TRelation* _rel_fis;
  TRelation* _rel_giu;
  TRelation* _rel_dit;
  int _cfis1, _cgiu1, _cdit1;
  int _cfis2, _cgiu2, _cdit2;
  int _sort;
  bool _inclditte;
  // settings etichette
  in _ind_what;
  int _ind_row, _ind_col, _rows_et, _cols_et;
  int _piv_row, _piv_col, _cod_row, _cod_col;
  bool _is_piv, _is_cod;
  bool* _frpos;
  TString _cod, _cofi, _name, _surname, _address, _surname_name, // questa vale solo per elenchi e rubriche, quando stampa nome e cognome per persone fisiche
  _cap, _prov, _loc, _com, _civ, _stato, _phone;                 
  TString16 _sex;
  
  int _ana_link, _dit_link;

  // BOOKMARKS per schede
  int _bk_ditta, _bk_ana, _bk_socio, _bk_attiv, _bk_registro, _bk_unloc;

protected:

  virtual void set_page(int file, int cnt);
  virtual bool preprocess_page(int file, int counter);
  virtual print_action postprocess_page(int file, int counter);
  virtual bool user_create();
  virtual bool user_destroy();
  virtual bool set_print(int n);
  virtual bool process_link(int id, const char* txt);
  
public:


  int cfis() { return _sort == 1 ? _cfis1 : _cfis2; }
  int cgiu() { return _sort == 1 ? _cgiu1 : _cgiu2; }
  int cdit() { return _sort == 1 ? _cdit1 : _cdit2; }

  const TRectype& look_com(const char* cod, const char* sta = NULL);
  const char* look_tab(const char* tabname, const char* cod, 
                       const char* fld = "S0");

  // bel casino, le schede
  void set_scheda_anagiu();
  void set_scheda_anafis();
  void set_scheda_ditta();
  void set_scheda_attiv();
  void set_scheda_registro();
  void set_scheda_unloc();
  void set_scheda_socio();
  void preprocess_etichette();
  void set_rubriche();
  void set_elenco();
  void set_schede();
  void set_etichette();
  void set_headers();
  void set_footers();

  const char* get_field(int ln, const char* fn)
  { return current_cursor()->curr(ln).get(fn); }

  void init_print();

  TAnaprint_app() : TPrintapp(), _cod(5), _cofi(30), _name(20), _surname(30), 
  _address(50), _cap(10), _prov(2), _com(50), _civ(5), 
  _stato(40),   _phone(30)

  { 
    _rel_fis = _rel_giu = _rel_dit = NULL; 
    _pr_type = undefined; _pr_what = anafis; 
    _inclditte = FALSE;
    _ind_what = residenza;
    _rows_et = 9; _cols_et = 40;
    _is_piv = TRUE; _is_cod = FALSE;
    _piv_row = 7; _cod_row = 8; _ind_row = 3;
    _piv_col = _ind_col = 3; _cod_col = 30;
    _frpos = NULL;
  }
};