package com.lemenzo.contacts;
import android.app.*;import android.content.*;import android.net.Uri;import android.os.Bundle;import android.view.*;import android.widget.*;

public class ContactDetailActivity extends Activity{
    private long id;private ContactsRepository repo;private ContactData d;private LinearLayout root;
    public void onCreate(Bundle b){super.onCreate(b);id=getIntent().getLongExtra("contact_id",-1);repo=new ContactsRepository(this);render();}
    protected void onResume(){super.onResume();if(repo!=null)render();}
    private void render(){
        d=repo.get(id);root=new LinearLayout(this);root.setOrientation(LinearLayout.VERTICAL);root.setBackgroundColor(Ui.BG);Ui.applySafeInsets(this,root);
        root.addView(Ui.subHeader(this,getString(R.string.contact_details)));
        ScrollView sv=new ScrollView(this);LinearLayout box=new LinearLayout(this);box.setOrientation(LinearLayout.VERTICAL);box.setPadding(Ui.dp(this,16),0,Ui.dp(this,16),Ui.dp(this,24));
        View avatar;
        if(d.photoBytes!=null&&d.photoBytes.length>0){ImageView iv=new ImageView(this);iv.setImageBitmap(android.graphics.BitmapFactory.decodeByteArray(d.photoBytes,0,d.photoBytes.length));iv.setScaleType(ImageView.ScaleType.CENTER_CROP);iv.setBackground(Ui.outline(this,Ui.SURFACE2,Ui.BLUE,52));iv.setClipToOutline(true);avatar=iv;}
        else {TextView av=Ui.title(this,initials(d.displayName),30);av.setGravity(Gravity.CENTER);av.setBackground(Ui.outline(this,Ui.SURFACE2,Ui.BLUE,52));avatar=av;}
        LinearLayout.LayoutParams ap=new LinearLayout.LayoutParams(Ui.dp(this,104),Ui.dp(this,104));ap.gravity=Gravity.CENTER_HORIZONTAL;box.addView(avatar,ap);
        box.addView(Ui.space(this,14));TextView name=Ui.title(this,d.displayName,26);name.setGravity(Gravity.CENTER);box.addView(name);
        if(!d.company.isEmpty()){TextView c=Ui.text(this,d.company,14,Ui.SECONDARY);c.setGravity(Gravity.CENTER);box.addView(c);}
        box.addView(Ui.space(this,18));
        LinearLayout actions=new LinearLayout(this);actions.setGravity(Gravity.CENTER);
        LinearLayout call=Ui.actionTile(this,R.drawable.ic_phone,getString(R.string.call));
        LinearLayout msg=Ui.actionTile(this,R.drawable.ic_message,getString(R.string.message));
        LinearLayout email=Ui.actionTile(this,R.drawable.ic_email,getString(R.string.email));
        LinearLayout fav=Ui.actionTile(this,R.drawable.ic_star,d.starred?getString(R.string.remove_favorite):getString(R.string.favorite));
        actions.addView(call,new LinearLayout.LayoutParams(0,Ui.dp(this,62),1));
        LinearLayout.LayoutParams ml=new LinearLayout.LayoutParams(0,Ui.dp(this,62),1);ml.leftMargin=Ui.dp(this,7);actions.addView(msg,ml);
        LinearLayout.LayoutParams el=new LinearLayout.LayoutParams(0,Ui.dp(this,62),1);el.leftMargin=Ui.dp(this,7);actions.addView(email,el);
        LinearLayout.LayoutParams fl=new LinearLayout.LayoutParams(0,Ui.dp(this,62),1);fl.leftMargin=Ui.dp(this,7);actions.addView(fav,fl);
        box.addView(actions);
        call.setOnClickListener(v->{if(!d.phones.isEmpty())launchPreferred(new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+Uri.encode(d.phones.get(0)))),"com.android.dialer");});
        msg.setOnClickListener(v->{if(!d.phones.isEmpty())launchPreferred(new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:"+Uri.encode(d.phones.get(0)))),"com.lemenzo.messenger");});
        email.setOnClickListener(v->{if(!d.emails.isEmpty())startActivity(new Intent(Intent.ACTION_SENDTO,Uri.parse("mailto:"+Uri.encode(d.emails.get(0)))));});
        fav.setOnClickListener(v->{repo.setStarred(id,!d.starred);render();});
        box.addView(Ui.space(this,18));
        for(String p:d.phones)addField(box,getString(R.string.phone),p);
        for(String e:d.emails)addField(box,getString(R.string.email),e);
        addField(box,getString(R.string.company),d.company);addField(box,getString(R.string.job_title),d.jobTitle);
        addField(box,getString(R.string.address),d.address);addField(box,getString(R.string.birthday),d.birthday);addField(box,getString(R.string.notes),d.notes);
        box.addView(Ui.space(this,18));Button edit=Ui.button(this,getString(R.string.edit),true);edit.setOnClickListener(v->{if(!d.localEditable)Toast.makeText(this,R.string.external_contact_read_only,Toast.LENGTH_LONG).show();else startActivity(new Intent(this,ContactEditorActivity.class).putExtra("contact_id",id));});box.addView(edit);
        box.addView(Ui.space(this,10));Button del=Ui.button(this,getString(R.string.delete),false);del.setTextColor(Ui.DANGER);del.setOnClickListener(v->{if(!d.localEditable){Toast.makeText(this,R.string.external_contact_read_only,Toast.LENGTH_LONG).show();return;}Ui.DialogParts dialog=Ui.showDialog(this,getString(R.string.delete_contact_title),getString(R.string.delete_confirm),null,getString(R.string.cancel),getString(R.string.delete),true);dialog.positive.setOnClickListener(x->{dialog.dialog.dismiss();repo.deleteLocal(d);Toast.makeText(this,R.string.contact_deleted,Toast.LENGTH_SHORT).show();finish();});});box.addView(del);
        sv.addView(box);root.addView(sv,new LinearLayout.LayoutParams(-1,0,1));setContentView(root);
    }
    private void launchPreferred(Intent intent,String packageName){
        try{
            Intent preferred=new Intent(intent);
            preferred.setPackage(packageName);
            startActivity(preferred);
        }catch(android.content.ActivityNotFoundException e){
            try{startActivity(intent);}catch(android.content.ActivityNotFoundException ignored){
                Toast.makeText(this,R.string.action_unavailable,Toast.LENGTH_LONG).show();
            }
        }
    }
    private void addField(LinearLayout box,String label,String value){if(value==null||value.trim().isEmpty())return;LinearLayout c=Ui.card(this);c.addView(Ui.text(this,label.toUpperCase(),11,Ui.BLUE));c.addView(Ui.space(this,4));c.addView(Ui.text(this,value,16,Ui.TEXT));box.addView(c);box.addView(Ui.space(this,8));}
    private String initials(String s){if(s==null||s.trim().isEmpty())return "•";String[]p=s.trim().split("\\s+");return p[0].substring(0,1).toUpperCase()+(p.length>1?p[p.length-1].substring(0,1).toUpperCase():"");}
}
