package br.com.javace.javou.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import org.apache.commons.lang3.text.WordUtils;
import java.util.ArrayList;
import java.util.List;
import br.com.javace.javou.R;
import br.com.javace.javou.model.Resume.Resume;
import br.com.javace.javou.model.participant.Participant;
import br.com.javace.javou.util.Constant;
import br.com.javace.javou.util.Util;
public class ParticipantDao {
private Context mContext;
private ClasseDB classeDB;
private SQLiteDatabase db = null;
private static ParticipantDao instance;
public ParticipantDao(Context context) {
super();
this.mContext = context;
}
public static ParticipantDao getInstance(Context context) {
if (instance == null) {
synchronized (ParticipantDao.class) {
if (instance == null) {
instance = new ParticipantDao(context);
}
}
}
return instance;
}
private void openConnection() {
try {
this.classeDB = ClasseDB.getInstance(this.mContext);
db = classeDB.getWritableDatabase();
} catch (Exception e) {
Log.e(Constant.TAG, "Erro ao abrir conex?es ParticipantDao");
}
}
private void closeConnection() {
try {
if (null != db) {
db.close();
db = null;
classeDB.close();
}
} catch (Exception e) {
Log.e(Constant.TAG, "Erro ao fechar conex?es ParticipantDao");
}
}
public void synchronizeParticipant(List<String[]> participants) {
if (participants != null) {
try {
openConnection();
for (String[] participant : participants) {
try {
if (!participant[0].equals("NOME")) {
ContentValues campos = new ContentValues();
campos.put(Constant.PARTICIPANT_name, participant[0]);
campos.put(Constant.PARTICIPANT_email, participant[1].toLowerCase());
campos.put(Constant.PARTICIPANT_code, participant[5]);
//campos.put(Constant.PARTICIPANT_phone, "");
campos.put(Constant.PARTICIPANT_phone, Util.replacePhone(participant[13]));
campos.put(Constant.PARTICIPANT_attend, 0);
campos.put(Constant.PARTICIPANT_nameEvent, "JAVOU! #09 - Casos de Sucesso");
String birthDate = participant[16];
campos.put(Constant.PARTICIPANT_birthDate, birthDate);
String company = WordUtils.capitalizeFully(participant[17].toLowerCase());
campos.put(Constant.PARTICIPANT_company, company);
campos.put(Constant.PARTICIPANT_sex, !participant[20].equals("Masculino"));
int shirtSize = 5;
if (!participant[3].contains("SEM Blusa")) {
shirtSize = Util.replaceShirtSize(participant[21]);
}
campos.put(Constant.PARTICIPANT_shirtSize, shirtSize);
try {
Long row = db.insertOrThrow(Constant.TABLE_PARTICIPANT, Constant.DATABASE, campos);
Log.d("ParticipantDao", row.toString());
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "insert: " + mContext.getString(R.string.app_name));
}
}
} catch (Exception e) {
e.getStackTrace();
}
}
closeConnection();
}catch (Exception e){
e.getStackTrace();
}
}
}
public boolean insert(Participant participant) {
if (participant != null) {
try {
openConnection();
ContentValues campos = new ContentValues();
campos.put(Constant.PARTICIPANT_name, participant.getName());
campos.put(Constant.PARTICIPANT_phone, participant.getPhone());
campos.put(Constant.PARTICIPANT_email, participant.getEmail());
campos.put(Constant.PARTICIPANT_photo, participant.getPhoto());
campos.put(Constant.PARTICIPANT_shirtSize, participant.getShirtSize());
campos.put(Constant.PARTICIPANT_attend, participant.isAttend() ? 1 : 0);
campos.put(Constant.PARTICIPANT_nameEvent, participant.getNameEvent());
campos.put(Constant.PARTICIPANT_birthDate, participant.getBirthDate());
campos.put(Constant.PARTICIPANT_sex, participant.isSex() ? 1 : 0);
campos.put(Constant.PARTICIPANT_company, participant.getCompany());
try {
return ( db.insertOrThrow(Constant.TABLE_PARTICIPANT, Constant.DATABASE, campos) != -1);
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "insert: " + mContext.getString(R.string.app_name));
}
} finally {
closeConnection();
}
}
return false;
}
public boolean update(Participant participant) {
try {
openConnection();
ContentValues campos = new ContentValues();
campos.put(Constant.PARTICIPANT_name, participant.getName());
campos.put(Constant.PARTICIPANT_phone, participant.getPhone());
campos.put(Constant.PARTICIPANT_email, participant.getEmail());
campos.put(Constant.PARTICIPANT_photo, participant.getPhoto());
campos.put(Constant.PARTICIPANT_shirtSize, participant.getShirtSize());
campos.put(Constant.PARTICIPANT_attend, participant.isAttend() ? 1 : 0);
campos.put(Constant.PARTICIPANT_nameEvent, participant.getNameEvent());
campos.put(Constant.PARTICIPANT_birthDate, participant.getBirthDate());
campos.put(Constant.PARTICIPANT_sex, participant.isSex() ? 1 : 0);
campos.put(Constant.PARTICIPANT_company, participant.getCompany());
String args[] = new String[]{String.valueOf(participant.getId())};
return (db.update(Constant.TABLE_PARTICIPANT, campos, "id = ?", args) != -1);
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "Erro ParticipantDao update: ", e);
Log.e(Constant.TAG, "update: " + mContext.getString(R.string.app_name));
} finally {
closeConnection();
}
return false;
}
public boolean updatePresence(Participant participant) {
try {
openConnection();
ContentValues contentValues = new ContentValues();
contentValues.put(Constant.PARTICIPANT_attend, participant.isAttend() ? 0 : 1);
String args[] = new String[]{String.valueOf(participant.getId())};
return (db.update(Constant.TABLE_PARTICIPANT, contentValues, "id = ?", args) != -1);
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "Erro ParticipantDao updatePresence: ", e);
Log.e(Constant.TAG, "updatePresence: " + mContext.getString(R.string.app_name));
} finally {
closeConnection();
}
return false;
}
public boolean delete(int id) {
try {
openConnection();
String args[] = new String[]{String.valueOf(id)};
return (db.delete(Constant.TABLE_PARTICIPANT, "id = ?", args) != -1);
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "Erro ParticipantDao delete: ", e);
Log.e(Constant.TAG, "delete: " + mContext.getString(R.string.app_name));
} finally {
closeConnection();
}
return false;
}
public ArrayList<Participant> getAll() {
Participant participant;
ArrayList<Participant> lParticipant = new ArrayList<>();
Cursor cursor;
try {
openConnection();
cursor = db.query(Constant.TABLE_PARTICIPANT, Constant.PARTICIPANT_COLS, null, null, null,
null, Constant.PARTICIPANT_name + " ASC");
while (cursor.moveToNext()) {
participant = new Participant();
participant.setId(cursor.getInt(0));
participant.setName(cursor.getString(1));
participant.setPhone(cursor.getString(2));
participant.setEmail(cursor.getString(3));
participant.setPhoto(cursor.getString(4));
//identifying who will be the type of group
int shirtSize = cursor.getInt(5);
participant.setGroup(true);
participant.setShirtSize(shirtSize);
participant.setAttend(cursor.getInt(6) == 1);
participant.setNameEvent(cursor.getString(7));
participant.setBirthDate(cursor.getString(8));
participant.setSex(cursor.getInt(9) == 1);
participant.setRaffled(cursor.getInt(10) == 1);
participant.setCompany(cursor.getString(11));
participant.setCode(cursor.getInt(12));
lParticipant.add(participant);
}
cursor.close();
return lParticipant;
} catch (Exception e) {
Log.e(Constant.TAG, "Erro ParticipantDao getAll: ", e);
} finally {
closeConnection();
}
return null;
}
public boolean updateAsRaffled(Participant participantFortunate) {
try {
openConnection();
ContentValues contentValues = new ContentValues();
contentValues.put(Constant.PARTICIPANT_raffled, 1);
String args[] = new String[]{String.valueOf(participantFortunate.getId())};
return (db.update(Constant.TABLE_PARTICIPANT, contentValues, "id = ?", args) != -1);
} catch (Exception e) {
e.getMessage();
Log.e(Constant.TAG, "Erro ParticipantDao updateAsRaffled: ", e);
Log.e(Constant.TAG, "updateAsRaffled: " + mContext.getString(R.string.app_name));
} finally {
closeConnection();
}
return false;
}
public int getTotalRegistrations(){
openConnection();
Cursor mCount= db.rawQuery("select count(*) from " + Constant.TABLE_PARTICIPANT, null);
mCount.moveToFirst();
int totalRegistrations= mCount.getInt(0);
mCount.close();
closeConnection();
return totalRegistrations;
}
public int getTotalAttendance(){
openConnection();
Cursor mCount= db.rawQuery("select count(*) from " + Constant.TABLE_PARTICIPANT + " WHERE attend=1", null);
mCount.moveToFirst();
int totalAttendance= mCount.getInt(0);
mCount.close();
closeConnection();
return totalAttendance;
}
public int getTotalRaffled(){
openConnection();
Cursor mCount= db.rawQuery("select count(*) from " + Constant.TABLE_PARTICIPANT + " WHERE attend=1 and raffled=1", null);
mCount.moveToFirst();
int totalRaffled= mCount.getInt(0);
mCount.close();
closeConnection();
return totalRaffled;
}
public Resume generateResume() {
Resume resume = new Resume();
resume.setTotalRegistrations(getTotalRegistrations());
resume.setTotalAttendance(getTotalAttendance());
resume.setTotalRaffled(getTotalRaffled());
return resume;
}
}